leetcode:判断合法二叉搜索树

18 篇文章 0 订阅

题目来源:力扣

题目描述:

实现一个函数,检查一棵二叉树是否为二叉搜索树。

审题:

此题我们可以依靠二叉搜索树的特性:二叉搜索树的中序遍历序列为递增序列.
因此,我们对树中节点进行中序遍历,依次判断当前节点是否满足递增要求即可.如果当前节点值小于等于其前驱节点值,则当前二叉树不是二叉搜索树,否则,继续遍历后序节点.
我们也可以将当前节点与其后继节点依次进行比较,但如果使用左中右这样的中序遍历序列,保存后继节点的步骤是较为麻烦的.如果我们使用右中左这样的中序遍历序列,便可以容易地保存后继节点,这相对于我们从右向左判断序列中的每一节点是否符合递增要求.

java算法实现:

与前驱节点进行比较(左中右遍历)
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    //中序遍历每一节点,将当前节点与其前驱节点进行比较
    TreeNode prev = null; //记录当前节点的前驱节点
    private boolean inOrder(TreeNode x){
        if(x == null)
            return true;
        boolean left = inOrder(x.left);
        if(left == false)
            return false;

        if(prev != null && x.val <= prev.val)
            return false;
        prev = x; //判断当前节点后,当前节点成为前驱动节点
        return inOrder(x.right);
    }

    public boolean isValidBST(TreeNode root) {
        return inOrder(root);
    }
}
与后驱节点进行比较(右中左遍历)
class Solution {
    //中序遍历每一节点,将当前节点与其后继节点进行比较
    TreeNode next = null;
    private boolean inOrder(TreeNode x){
        if(x == null)
            return true;
        boolean right = inOrder(x.right);
        if(right == false)
            return false;

        if(next != null && x.val >= next.val)
            return false;
        next = x; //更新后继节点
        return inOrder(x.left);
    }

    public boolean isValidBST(TreeNode root) {
        return inOrder(root);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值