BST의 재귀 함수를 회귀가 아닌 것으로 변환하는 과정에서 인터뷰를 준비하는 중입니다. 지금까지 선주문, inorder, postorder, 검색, 삭제, 삽입 및 BST를 순환 연결된 목록으로 변환했습니다. 스택이나 대기열을 사용하여 높이를 얻고 BST인지 찾아내는 데 어려움이 있습니다. 모든 팁은 크게 감사하겠습니다. 나는 코드를 찾는 것이 아니라 코드의 논리를 찾고있다.트리의 높이를 재귀 적으로 구현하지 않는 의사 코드 및 isBST
4
A
답변
5
처음에는 위와 같은 인터뷰를 준비하는 것이 좋습니다! 이 알고리즘으로 재미있게 놀고 싶습니다.
이진 트리가 BST인지 확인하는 작업부터 시작해 보겠습니다. 이 작업을 수행하는 한 가지 방법은 트리의 inorder walk를 수행하고 요소가 정렬 된 순서로 있는지 확인하는 것입니다. 트리가 BST 인 경우에만 true입니다. 트리 요소의 inorder 보행을 수행하는 코드를 이미 가지고 있기 때문에, inorder walk에서 나온 요소가 마지막 요소를 추적하여 정렬되는지 코드를 쉽게 적응할 수 있어야합니다 inorder walk를 수행 한 다음 생성 된 각 요소를 이전 요소와 비교합니다. 두 개가 고장난 경우 나무는 BST가 아닙니다.
트리의 높이를 결정하려면, 지금까지 나온 검색 (preorder, postorder, inorder) 중 하나를 취하여 각 지점에서 스택의 높이를 추적하는 것이 좋습니다 . 아이디어는 스택이 항상 어떤 노드에서 루트까지의 경로를 추적하므로 트리를 걷고 스택이 가장 깊게 보인 것을 기록 할 수 있습니다. 이 최대 깊이는 트리의 높이입니다.
희망이 도움이됩니다. 그리고 행운의 인터뷰와 함께 최고!
0
트리의 높이를 찾으려면 Morris 탐색 [O (n) 시간]을 사용할 수 있습니다.
유효한 BST인지 확인하려면 트리의 inorder walk를 수행하십시오. 요소를 배열로 이동하십시오. 어레이가 정렬되었는지 또는 BST의 유효성을 검증하지 않는지 점검하십시오.
관련 문제
- 1. 의사 코드 (NTRUEncrypt)에서 재귀 구현
- 2. 되풀이 릴레이션에서 재귀 트리의 높이를 결정하는 방법은 무엇입니까?
- 3. 병합 정렬 재귀 트리의 높이
- 4. 게임 트리와 의사 결정 트리의 차이점은 무엇입니까?
- 5. 레벨을 재귀 적으로 정렬
- 6. 소수 요소에서 재귀 목록 재구성 (재귀 적으로)
- 7. 속성을 재귀 적으로 제거
- 8. Emacs에서 재귀 적으로 찾으십니까?
- 9. 이메일 및 파일 재귀 적으로 이동
- 10. 디렉터리 내용을 재귀 적으로 나열 및 저장합니다.
- 11. LISP의 이진 트리의 깊이를 계산 재귀
- 12. 재귀 적으로 sqlite에서 재귀 계산을하는 대신?
- 13. 중첩 목록을 재귀 적으로 검색합니다.
- 14. Fortune의 알고리즘 의사 코드
- 15. 재귀 적으로 Samba 공유를 트래버스합니까?
- 16. 만들기 디렉토리를 재귀 적으로 파이썬
- 17. C 구조체를 재귀 적으로 해제합니다.
- 18. 변형은 재귀 적으로 자체를 사용합니까?
- 19. 문자열을 재귀 적으로 잘라 내기
- 20. java.util.List가 Serializable을 구현하지 않는 이유는 무엇입니까?
- 21. 이 알고리즘의 의사 코드
- 22. 명령어 설명을위한 의사 코드
- 23. 구현 루프 의사 코드
- 24. 프로그래밍 의사 코드
- 25. FOR가있는 의사 코드
- 26. Mysql에 의사 코드 구조?
- 27. 의사 코드 - 공식 규칙
- 28. 의사 코드 이해 도움말
- 29. WPF TreeView에서 재귀 적으로 바인딩하기
- 30. 서브 디렉토리를 재귀 적으로 탐색합니다.