유효한 이진 검색 트리인지 확인 이진 트리를 감안할 때.
다음과 같은 특성을 갖는 이진 검색 트리를 가정 해 봅시다 :
트리의 왼쪽 자식 노드는 현재 노드의 수보다 단지 적게 포함되어 있습니다.
오른쪽 하위 트리 현재 노드의 노드 수보다 단지 더 포함되어 있습니다.
모든 왼쪽 하위 트리 오른쪽 하위 트리 자체도 이진 검색 트리해야합니다.
예 1 :
예 2 :
주문한 경우 낮은 수준의 연습, 예약 주문은, 참조
1 #의 이진 트리 노드에 대한 정의. 2 #의 클래스의 TreeNode : 3 # DEF __init __ (자체, X) : 4 # = X self.val 5 # self.left = 없음 6 # self.right = 없음 7 개 8 클래스 : 솔루션 9 DEF isValidBST (자기 루트 : TreeNode를 ) -> BOOL : 10 res_ = [] (11) 스택은 = [] (12) 중에 뿌리 또는 스택 : 13 의 경우 : 루트 14 stack.append (루트) (15) 루트 = root.left 16 다른 : 17 루트 = stack.pop () 18 res_.append (root.val) 19 루트 = root.right 20 스택 = res_.copy ()를 21 stack.sort () 22 경우 ! 렌 (SET (스택)) = LEN (스택) (23) 창 거짓 24 리턴 스택 == res_ 25 26
실행시 : 68 밀리, 모든 Python3 제출에 사용자의 73.22 %를 이길
메모리 소비 : 16.8 MB는 모든 Python3 제출에 사용자의 7.23 %를 이길
마다 현재 값 및 상기 상부 및 하부 경계는, 그 좌측 및 우측 서브 트리의 순환 과정을 비교한다 :
1 급 해결책 : 2 DEF isValidBST (자기 루트) : 3 '' ' 4 : 입력 루트 : TreeNode를 5 : RTYPE : BOOL 6 "" " 7 데프 헬퍼 (노드, 저급 = 플로트 ( ' -INF ' ) 상부 = 플로트 ( " INF " )) : 8 의 경우 되지 노드 : 9 복귀 트루 10 11 발 = node.val 12 경우 브로 <= 저급 또는 브로> = 상부 : 13 반환거짓 14 15 만약 하지 헬퍼 (node.right, 발, 상부) 16 리턴 거짓 17 만약 하지 헬퍼 (node.left, 저급, 발) 18 리턴 거짓 19 창 트루 20 21 복귀 도우미 (루트)
실행시 : 76 밀리, 모든 Python3 제출에 사용자의 42.48 %를 이길
메모리 소비 : 16.2 MB는 모든 Python3 제출의 39.06 퍼센트에 패배