leetcode----- Validate Binary Search Tree(判斷一棵樹是否是二叉搜尋樹)
1、題目描述
給定一棵二叉樹,判斷這棵樹是否是二叉搜尋樹。
二叉搜尋樹的定義如下:
二叉搜尋樹(Binary Search Tree),又稱二叉排序樹,它或者是一顆空樹,或者具有如下性質的樹:
- 若它的左子樹不為空,則左子樹上所有節點的值都小於根節點的值
- 若它的右子樹不為空,則右子樹上所有節點的值都大於根節點的值
- 它的左右子樹也分別為二叉搜尋樹
2、思路
中序遍歷二叉樹,將節點的值依次加入到一個ArrayList中,遍歷ArrayList,如果ArrayList中前面的元素大於等於後面的元素,則該二叉樹不是一棵二叉搜尋樹。
3、程式碼如下
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
ArrayList<Integer> arr = new ArrayList<Integer>();
public boolean isValidBST(TreeNode root) {
if(root == null){
return true;
}
if(root.left==null && root.right==null){
return true;
}
inOrder(root);
for(int i=1;i<arr.size();i++){
if(arr.get(i)<=arr.get(i-1)){
return false;
}
}
return true;
}
/**
中序遍歷二叉樹
*/
public void inOrder(TreeNode root){
if(root.left != null){
inOrder(root.left);
}
arr.add(root.val);
if(root.right != null){
inOrder(root.right);
}
}
}