이진 트리가 있다고 가정합니다. 이진 탐색 트리인지 아닌지 확인해야 합니다. 우리가 알고 있듯이 BST에는 다음과 같은 속성이 있습니다 -
- 왼쪽 하위 트리의 모든 노드가 현재 노드 값보다 작음
- 오른쪽 하위 트리의 모든 노드가 현재 노드 값보다 큽니다.
- 이 속성은 모든 노드에 대해 재귀적으로 유지됩니다.
따라서 입력이 다음과 같으면
그러면 출력은 True
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- x :=트리 요소의 중위 순회 시퀀스 목록
- x가 정렬되면
- 참을 반환
- 거짓 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right class Solution: def solve(self, root): def inorder(root,l): if root is None: return inorder(root.left,l) l.append(root.data) inorder(root.right,l) l = [] inorder(root,l) return l == sorted(l) ob = Solution() root = TreeNode(5) root.left = TreeNode(1) root.right = TreeNode(9) root.right.left = TreeNode(7) root.right.right = TreeNode(10) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8) print(ob.solve(root))
입력
root = TreeNode(5) root.left = TreeNode(1) root.right = TreeNode(9) root.right.left = TreeNode(7) root.right.right = TreeNode(10) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8)
출력
True