[leetcode]_Validate Binary Search Tree

3789 단어 Binary search
제목: 두 갈래 나무 한 그루가 합법적인지 판단한다.두 갈래 트리가 왼쪽 트리의 모든 값<현재값<오른쪽 트리의 모든 값을 만족시키고 모든 점이 이 조건을 만족시켜야 합니다.
생각:
1. 현재 루트 노드에서 판단하여 루트 노드의 왼쪽 트리 최대값 maxLeft, 오른쪽 트리 최소값 minRight를 구한다.
2. 현재 노드 값이 maxLeft 3. 만족하면 좌우 나무가 똑같이 합법적인지 아닌지를 귀속적으로 판단한다.
 
코드:
 1     public boolean isValidBST(TreeNode root) {
 2         if(root == null) return true;
 3         
 4         int maxLeft = maxValue(root.left);
 5         int minRight = minValue(root.right);
 6         
 7         return maxLeft < root.val && minRight > root.val && isValidBST(root.left) && isValidBST(root.right);
 8     }
 9     
10     public int maxValue(TreeNode node){
11         if(node == null) return Integer.MIN_VALUE;
12         int leftMax = maxValue(node.left);
13         int rightMax = maxValue(node.right);
14         return Math.max(node.val , Math.max(leftMax , rightMax));
15     }
16     
17     public int minValue(TreeNode node){
18         if(node == null) return Integer.MAX_VALUE;
19         int leftMin = minValue(node.left);
20         int rightMin = minValue(node.right);
21         return Math.min(node.val , Math.min(leftMin , rightMin));
22     }

인터넷에는 더 간단한 해법이 있다.오늘 너무 피곤해, 내일 다시 할게.see you~

좋은 웹페이지 즐겨찾기