이진 트리를 확인 LeetCode.98

주제 설명 :

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

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

트리의 왼쪽 자식 노드는 현재 노드의 수보다 단지 적게 포함되어 있습니다.
오른쪽 하위 트리 현재 노드의 노드 수보다 단지 더 포함되어 있습니다.
모든 왼쪽 하위 트리 오른쪽 하위 트리 자체도 이진 검색 트리해야합니다.
예 1 :

입력 :
2
/ \
1 3
출력 : 진정한
예 2 :

입력 :
5
/ \
14
  / \
  36
출력 : 잘못된
결론 입력으로서 [5,1,4, 널, 널, 3,6].
  5는 루트 노드이지만, 오른쪽 자식 노드 4입니다.

일반적인 아이디어 :

재귀 검증 :

  1. 현재 노드를 사용할 수없는 경우, 현재 노드의 값의 상한과 하한은 비교
  2. 그런 다음, 왼쪽 및 오른쪽 하위 트리의 단계를 반복

다음 사항에 유의하십시오

  1. 프로그램 상단 초기화, 낮은, 각각 언어 장개석과 음의 무한대, C ++ 및 사용 INT64_MIN INT64_MAX 가장 큰 나무를했다.
  2. 재귀 프로세스를 지속적으로 업데이트해야, 하한, 현재의 왼쪽 자식 노드 값의 상한, 현재의 우측 자식 노드 값의 하한

코드 :

/ * * 
 * 이진 트리 노드에 대한 정의. 
 * 구조체의 TreeNode { 
 * INT의 발; 
 * * TreeNode를 왼쪽; 
 * * TreeNode를 오른쪽; 
 *의 TreeNode (INT의 X) 발 (X), 오른쪽 (NULL) (NULL) 왼쪽 {} 
 *}; 
 * / 
클래스 솔루션 {
 공개 :
     부울 isValidBST (TreeNode를의 *의 루트) 
    { 
        반환 DFS를 (루트, INT64_MIN, INT64_MAX); 
    } 
    부울 DFS (TreeNode를의 * 루트,  INT 마일,  INT의 엄마) {
         경우 (루트 == NULL) 반환  사실 ;
        만약(루트 -> 발 <= MI || 루트 -> 발> = MA)   반환  거짓 ;
        다른  
            반환 DFS (루트 레벨> 왼쪽, 마일, 루트 레벨> 발) && DFS (루트 레벨> 오른쪽 루트 레벨> 발, 엄마); 
    } 
};

 

추천

출처www.cnblogs.com/liu845904963/p/11329687.html