首页 > 其他 > 详细

LeetCode98. 验证二叉搜索树

时间:2021-06-21 11:35:02      阅读:22      评论:0      收藏:0      [点我收藏+]

LeetCode98. 验证二叉搜索树

题目描述

/**
     * 给定一个二叉树,判断其是否是一个有效的二叉搜索树。
     * <p>
     * 假设一个二叉搜索树具有如下特征:
     * <p>
     * 节点的左子树只包含小于当前节点的数。
     * 节点的右子树只包含大于当前节点的数。
     * 所有左子树和右子树自身必须也是二叉搜索树。
     */

思路分析

  1. 验证二叉搜索树,首先需要理解满足二叉搜索树的条件,即当前节点的左子树的所有元素的值都小于当前节点的值,当前节点的右子树的所有元素的值都大于当前节点的值,当前节点的左子树和右子树也必须是二叉搜索树
  2. 定义两个变量确定一个范围,表示当前节点元素的值应该满足的范围,如果是左子树的左子节点,则应该直接小于父节点的值,如果是右子节点,则应该大于当前节点的直接父节点,而小于树的根节点
  3. 如果是右子树的左子节点,则应该小于当前节点的直接父节点的值,并且大于该树根节点的值,如果是右子节点,则直接大于当前父节点的值即可
  4. 编写一个递归函数实现上述功能,并向左向右递归
  5. 源码见下

源码及分析

/**
     *
     * @param root 根节点
     * @return
     */
    public boolean isValidBST(TreeNode root) {
        //初始最小最大值为Long对应的最小最大值
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    /**
     * 功能:判断以root为根节点的子树的左右节点是否在指定的范围
     *
     * @param root  二叉树根节点
     * @param lower 以root为根节点的满足二叉搜索树的最小值
     * @param upper 最大值
     * @return 返回判断的结果
     */
    public boolean isValidBST(TreeNode root, long lower, long upper) {
        //如果根节点为空
        if (root == null) {
            return true;
        }
        //如果当前节点的值不满足二叉搜索树的条件
        if (!(root.val > lower && root.val < upper)) {
            return false;
        }
        //向左向右递归判断
        return isValidBST(root.left, lower, root.val) && isValidBST(root.right, root.val, upper);
    }

LeetCode98. 验证二叉搜索树

原文:https://www.cnblogs.com/mx-info/p/14911245.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!