LeetCode - 098-- 검증 검색 이진 트리 (파이썬)

유효한 이진 검색 트리인지 확인 이진 트리를 감안할 때.

다음과 같은 특성을 갖는 이진 검색 트리를 가정 해 봅시다 :

트리의 왼쪽 자식 노드는 현재 노드의 수보다 단지 적게 포함되어 있습니다.
오른쪽 하위 트리 현재 노드의 노드 수보다 단지 더 포함되어 있습니다.
모든 왼쪽 하위 트리 오른쪽 하위 트리 자체도 이진 검색 트리해야합니다.
예 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 퍼센트에 패배
 

추천

출처www.cnblogs.com/NPC-assange/p/11489733.html