标签:它的 public str 二叉排序树 code 验证 turn 运行 二叉搜索树
思路
代码
public boolean isValidBST(TreeNode root) {
boolean ans =true;
if(root==null) return true;
if (root.left == null && root.right == null) return true;
if(root.left!=null){
if(root.left.val>=root.val) return false;
ans=isLeftSubValid(root.left,root);
}
if(root.right!=null){
if(root.right.val<=root.val) return false;
ans=isRightSubValid(root.right,root);
}
return ans;
}
public boolean isLeftSubValid(TreeNode node,TreeNode pre){
if(node.left!=null){
if(node.left.val>=node.val||(node!=pre&&node.left.val>=pre.val)){
return false;
}
pre=node;
isLeftSubValid(node.left,pre);
}
if(node.right!=null){
if(node.right.val<=node.val||(node!=pre&&node.right.val>=pre.val)){
return false;
}
pre=node;
isLeftSubValid(node.right,pre);
}
return true;
}
public boolean isRightSubValid(TreeNode node,TreeNode pre){
if(node.left!=null){
if(node.left.val>=node.val||(node!=pre&&node.left.val<=pre.val)){
return false;
}
pre=node;
isRightSubValid(node.left,pre);
}
if(node.right!=null){
if(node.right.val<=node.val||(node!=pre&&node.right.val<=pre.val)){
return false;
}
pre=node;
isRightSubValid(node.right,pre);
}
return true;
}
思路
代码
class Solution{
long pre=Long.Min_VALUE;
public boolean isValidBST(TreeNode root){
if(root==null){
return true;
}
//访问左子树
if(!isValidBST(root.left)){
return false;
}
//访问当前节点:如果当前节点小于等于中序遍历的前一个节点,说明不满足BST,返回false;否则继续遍历
if(root.val<=pre){
return false;
}
pre=root.val;
//访问右子树
return isValidBST(root.right);
}
}
一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的结点。
标签:它的 public str 二叉排序树 code 验证 turn 运行 二叉搜索树
原文地址:https://www.cnblogs.com/yh-simon/p/12833512.html