Leetcode98:验证二叉搜索树

(1)递归方法

class Solution {
    public boolean isValidBST(TreeNode root) {
        return helper(root,Long.MIN_VALUE,Long.MAX_VALUE);//表示最小值和最大值
    }
    public boolean helper(TreeNode node,long lower,long upper){
        if(node==null) return true;
        if(node.val<=lower||node.val>=upper){return false;}

        return helper(node.left,lower,node.val)&&helper(node.right,node.val,upper);  //判断两者都为真的时候返回真,一个不为真则返回false;更新左边的时候注意更新的是最大值,最小值为无穷小;更新右边的时候是更新最小值,最大值为无穷大;
    }
}

(2)中序遍历法

class Solution {
    public boolean isValidBST(TreeNode root) {
        Stack<TreeNode> stack = new Stack();
        double pre = -Double.MAX_VALUE;//初始设置一个最小值,便于第一次比较
        while(!stack.isEmpty()||root!=null){//当栈和树还不为空的时候遍历下去,root=null的情况是在叶子节点的时候继续向左或者向右下去,这个时候root=null,会直接跳过第二个while()循环,去把栈中的数据弹出来给root,然后向右子树方向走,如果右字树为null,则继续沿着左子树方向向上走,中序遍历完后得到的是从小到大的的数据排序
            while(root!=null){//这里的作用不仅是沿着左子树走下去,还有树节点为空的时候跳过这个循环
                stack.push(root);
                root=root.left;
            }
            root=stack.pop();
            if(root.val<=pre) return false;
            pre=root.val;
            root=root.right;
        }
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值