98. 驗證二叉搜尋樹——Java實現
阿新 • • 發佈:2020-12-14
題目描述:
給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。
假設一個二叉搜尋樹具有如下特徵:
節點的左子樹只包含小於當前節點的數。
節點的右子樹只包含大於當前節點的數。
所有左子樹和右子樹自身必須也是二叉搜尋樹。
示例 1:
輸入:
輸出: true
示例 2:
輸入:
輸出: false
解釋: 輸入為: [5,1,4,null,null,3,6]。
根節點的值為 5 ,但是其右子節點值為 4 。
Java程式碼:
核心程式碼:
List<Integer> res = new ArrayList<Integer> ();
public boolean isValidBST(TreeNode root) {
if(root ==null)
return true;
inorder(root, res);
for(int i=0; i<res.size()-1; i++){
if(res.get(i)>=res.get(i+1))
return false;
}
return true;
}
public void inorder(TreeNode root, List<Integer> res){
if(root == null)
return;
inorder(root.left, res);
res.add(root.val);
inorder(root.right, res);
}
全部程式碼:
package com.renxia;
import java.util.ArrayList;
import java.util.List;
public class nineEight {
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
private static List<Integer> res = new ArrayList<Integer>();
public static boolean isValidBST(TreeNode root) {
if(root ==null)
return true;
inorder(root, res);
for(int i=0; i<res.size()-1; i++){
if(res.get(i)>=res.get(i+1))
return false;
}
return true;
}
public static void inorder(TreeNode root, List<Integer> res){
if(root == null)
return;
inorder(root.left, res);
res.add(root.val);
inorder(root.right, res);
}
public static void main(String[] args) {
TreeNode node1 = new TreeNode(1);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
node5.left = node1;
node5.right = node4;
node4.left = node3;
node4.right = node6;
System.out.println(isValidBST(node5));
}
}
執行結果:
【以示例2為參考】