验证二插搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

所谓二插搜索树

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

 

 

 

 思路:根据二插搜索树的特点,很容易想到二叉树的中序遍历,中序遍历一遍,树种的数据升序,

定义一个变量tmp,表示当前遍历结点的前一个值,只要判断当前结点值大于tmp,那么就一直遍历,直到遍历结束,否则返回false;

先看一下我当时提交的错误代码

case1:错误的原因就是没有判断左右结点,直接在结尾返回true,那么不管中间过程如何,结果一直是true

class Solution {
    long tmp = Long.MIN_VALUE;
    public boolean isValidBST(TreeNode root) {
       //中序遍历就行了
       if(root == null) return true;
       isValidBST(root.left);
       if(root.val > tmp){
           tmp = root.val;
       }else{
           return false;
       }
       isValidBST(root.right);
       return true;
    }
}

正确的代码

class Solution {
    long tmp = Long.MIN_VALUE;
    public boolean isValidBST(TreeNode root) {
       //中序遍历就行了
       if(root == null) return true;
       boolean left = isValidBST(root.left);
       if(root.val > tmp){
           tmp = root.val;
       }else{
           return false;
       }
       boolean right = isValidBST(root.right);
       return left && right;
    }
}

 

posted @ 2022-09-09 10:38  码到成功hy  阅读(22)  评论(0编辑  收藏  举报
获取

hahah

name age option