Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater than the node's key.
- Both the left and right subtrees must also be binary search trees.
Example 1:
Input: 2 / \ 1 3 Output: true
Example 2:
5 / \ 1 4 / \ 3 6 Output: false Explanation: The input is: [5,1,4,null,null,3,6]. The root node's value is 5 but its right child's value is 4.
题目大意:
查看这个树是否满足二叉搜索树的要求。
解法:
如果满足二叉搜索树,那么这个树的中序遍历一定是升序的,所以利用中序遍历查看序列是否是满足升序条件即可。
java:
class Solution {
public boolean isValidBST(TreeNode root) {
Stack<TreeNode>s=new Stack<TreeNode>();
TreeNode pre=null;
while(!s.empty()||root!=null){
while(root!=null){
s.push(root);
root=root.left;
}
root=s.pop();
if(pre!=null && pre.val >= root.val) return false;
pre=root;
root=root.right;
}
return true;
}
}
还有一种解法,就是递归的判断左右子树是否在给定数值范围内。
java:
class Solution {
public boolean isVaildBSTCore(TreeNode root,long minVal,long maxVal){
if(root==null) return true;
if(minVal>=root.val || maxVal<=root.val) return false;
return isVaildBSTCore(root.left,minVal,root.val)&&isVaildBSTCore(root.right,root.val,maxVal);
}
public boolean isValidBST(TreeNode root) {
if(root==null) return true;
return isVaildBSTCore(root,Long.MIN_VALUE,Long.MAX_VALUE);
}
}