이진 트리에서 문제가 발생했습니다. 문제가 발생하면 전체 이진 트리의 마지막 레벨에서 오른쪽 노드를 찾아야합니다. 여기서 문제는 O (n) 시간에 수행해야한다는 것입니다. 멈춤 지점, O (n)에서하는 것은 모든 요소를 순회하면서 간단하지만 O (n) 미만의 복잡성에서이 작업을 수행 할 수있는 방법이 있습니다. 인터넷을 통해 많은 탐색을했습니다. 그 물건에 관해서 아무것도 얻지 마라. 미리 감사드립니다. 완전한 이진 트리의 마지막 레벨에서 가장 오른쪽 노드의 위치를 찾는 방법은 무엇입니까?
답변
완전한 이진 트리이므로 나뭇잎에 도달 할 때까지 모든 오른쪽 노드로 이동하면 O (N)이 아니라 O (logN)가됩니다. 정규 이진 트리에서는 최악의 경우 모든 노드가 오른쪽으로 정렬되기 때문에 O (N)이 필요하지만 완전한 이진 트리이므로
분명히 'O보다 더 잘 수행 될 수 있습니다 (n)'. – amit
그냥 TomerSH가 모든 노드를 방문하여 더 나은 방법을 묻는 것 같아요. amit라고 말한 것 같습니다. –
예, O(log(n)^2)
에서 할 수 있습니다. 이진 검색을 변형하여
이것은 가장 왼쪽의 요소 으로 이동 한 다음 두 번째로 왼쪽 요소로 이동 한 다음 네 번째로 가장 왼쪽의 요소 인 8 번째로 이동하여 수행 할 수 있습니다. 이러한 요소가 없을 때까지. 마지막으로 찾은 요소가 i
번째이고 처음으로 2i
이 아닌 것으로 가정 해 보겠습니다.
이제이 범위에서 이진 검색을 할 수 있습니다.
총 반복 횟수는 O(log(n/2)) = O(logn)
이고 각 반복은 전체 트리를 추월하기 때문에 총 시간은 O(log(n)^2)
입니다.
여기에서
(1)과 다음은 "X leftest 요소는"트리의 가장 깊은 수준의 노드 만 참조한다.
노드 수를 알고 있다고 가정합니다. 그 번호를 n
으로합시다.
완전한 이진 트리에서 레벨 i
은 레벨 i - 1
보다 두 배 많은 노드 수를 갖습니다.
사이에서 n
을 반복적으로 나눌 수 있습니다. 나머지가있는 경우 n
은 올바른 아동입니다. 그렇지 않으면 왼쪽 자식입니다. 나머지가 있든 없든 시퀀스가되도록 스택에 저장하는 것이 좋습니다.
Stack<char> s;
while (n > 1)
{
if (n % 2 == 0)
s.push('L');
else
s.push('R');
n = n/2; // n would int so division is floor
}
while
완료는, 스택은 가장 오른쪽 노드의 경로가 포함되어 있습니다.
while
이 실행 된 횟수는 log_2(n)
입니다.
스택 자체에 O (n) 시간을 추가하면이 시간이 중요하지 않습니다. –
@aswin mythili가 아닙니다. 스택에 삽입하는 것은 O (1)입니다. 목록이나 벡터를 사용할 수도 있습니다. 시간은'log_2 (n)'인 삽입 횟수에 묶여있다. – lrleon
- 1. 전체 이진 트리와 완전한 이진 트리의 차이점은 무엇입니까?
- 2. 완전한 이진 트리와 균형 이진 트리의 차이점
- 3. 허프만 코드를위한 완전한 이진 트리의 이점은 무엇입니까?
- 4. 노드의 오른쪽 자식을 순서대로 트리의 이진 트리 표현으로 계산하기
- 5. 이진 트리의 잎을 찾는 방법은 무엇입니까?
- 6. horizontalScrollView에서 가장 오른쪽 위치를 찾는 방법
- 7. 문자열에서 마지막 알파벳의 위치를 찾는 방법은 무엇입니까?
- 8. 가장 좋은 창고 위치를 찾는 방법은 무엇입니까?
- 9. 이진 검색 트리의 중복 항목
- 10. SML에서 이진 트리의 가장 깊은 요소 찾기
- 11. 왼쪽 자식 오른쪽 형제 트리에서 노드의 부모를 찾는 방법은 무엇입니까?
- 12. 레드 블랙 트리의 마지막 단계를 찾는 방법은 무엇입니까?
- 13. 이진 트리에서 노드의 첫 번째 공통 조상을 찾는 방법은 무엇입니까?
- 14. Prolog를 사용하여 이진 트리의 깊이를 찾는 방법
- 15. 이진 탐색 트리의 분석
- 16. 모든 리프 노드의 오른쪽 포인터를 이진 트리의 다음 리프 노드로 변경하십시오.
- 17. 이진 탐색 트리의 깊이가
- 18. 이진 트리의 요소 정렬
- 19. 이진 트리 노드의 깊이
- 20. 체스, 대각선으로 움직이는 마지막 위치를 찾는 알고리즘
- 21. 이진 트리의 중간 노드
- 22. 이진 트리에서 노드의 경로를 반복적으로 찾는 것
- 23. 이진 검색 트리에서 노드의 컴퓨팅 순위
- 24. OCaml - 트리의 레벨에서 노드를 파싱합니다.
- 25. 이진 트리의 최적 채우기 순서
- 26. 이진 트리의 최소 요소
- 27. 이진 트리의 배열 구현
- 28. 트리의 모든 노드의 데이터 필드 채우기
- 29. 이진 트리의 가장 깊은 노드 찾기
- 30. 이진 트리의 순차 후계자
트리에 총 노드 수를 저장하면 왼쪽 분기 또는 오른쪽 분기를 정확히 방문 할 때를 알고 있기 때문에 O (logN)입니다. –