验证二叉搜索树

题目描述:给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

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

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/validate-binary-search-tree/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:递归法

根据二叉搜索树的性质,当前节点左子树的上边界(不包含)和右子树的下边界(不包含)是当前节点的值,所以可以用递归的方法来解决,递归过程如下:

  • 根节点没有父结点,所以第一次调用递归方法上下边界使用最大最小值;
  • 如果当前节点为null,说明是叶子节点,直接返回true;
  • 如果当前节点的值不在上下边界范围内,返回false;
  • 递归判断当前节点的左右节点是否在相应的上线边界范围内。
import com.kaesar.leetcode.TreeNode;

public class LeetCode_098 {
/**
* 递归法
*
* @param root
* @return
*/
public static boolean isValidBST(TreeNode root) {
return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
} /**
* 递归方法
*
* @param node 当前节点
* @param low 当前节点的下边界(不包含)
* @param high 当前节点的上边界(不包含)
* @return
*/
private static boolean isValidBST(TreeNode node, long low, long high) {
// 如果node为null,说明是叶子节点,直接返回true
if (node == null) {
return true;
}
// 如果当前节点的值不在上下边界范围内,返回false
if (node.val <= low || node.val >= high) {
return false;
} // 递归判断当前节点的左右节点是否在相应的上线边界范围内
return isValidBST(node.left, low, node.val) && isValidBST(node.right, node.val, high);
} public static void main(String[] args) {
TreeNode root = new TreeNode(5);
root.left = new TreeNode(1);
root.right = new TreeNode(4);
root.right.left = new TreeNode(3);
root.right.right = new TreeNode(6); System.out.println(isValidBST(root));
}
}

【每日寄语】 生命不是用来寻找答案,不是用来解决问题,它是用来愉快地生活的。与其愁眉苦脸地去工作,不如寄工作于娱乐。努力的人万岁!

LeetCode-098-验证二叉搜索树的更多相关文章

  1. LeetCode:验证二叉搜索树【98】

    LeetCode:验证二叉搜索树[98] 题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当 ...

  2. LeetCode 98. 验证二叉搜索树 | Python

    98. 验证二叉搜索树 题目来源:https://leetcode-cn.com/problems/validate-binary-search-tree 题目 给定一个二叉树,判断其是否是一个有效的 ...

  3. Java实现 LeetCode 98 验证二叉搜索树

    98. 验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右 ...

  4. 力扣Leetcode 98. 验证二叉搜索树

    验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身 ...

  5. LeetCode 98 验证二叉搜索树

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

  6. Leetcode 98 验证二叉搜索树 Python实现

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

  7. LeetCode 98——验证二叉搜索树

    1. 题目 2. 解答 2.1. 方法一 我们初始化根节点的范围为长整形数据的最小最大值 \([LONG\_MIN,LONG\_MAX]\),则其左子节点的取值范围为 \([LONG\_MIN,根节点 ...

  8. LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)

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

  9. 【LeetCode】验证二叉搜索树

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

  10. [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列

    Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...

随机推荐

  1. python 小兵(1)

    变量规则 1.只能以数字,字母,下划线命名 2.不能使用数字开头 3.不能使用python关键字 4.不建议用拼音或中文 5区分大小写 6推荐使用驼峰,下划线 全部大写是常量 注释 # 单行注释 (当 ...

  2. shiro 快速入门详解。

    package com.aaa.lee.shiro; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.*; i ...

  3. 关于diffing算法中key的使用

    在vue和react中(只学了这两个),经常需要渲染元素到DOM上,而且如果不写key,有的浏览器会进行报错或者进行提示. 在我的理解里:key其实就是一个身份的标识,证明这个位置坐的就是这个人.后期 ...

  4. vi TOhtml:复制保持格式和高亮

    1. 文本编辑:在vim中编辑好,复制到opera mail中就会格式错乱,比如:行前空格.缩进消失:2. 代码复制到其他地方,无法显示彩色高亮:找到了一个变通方案:使用TOhtml把vim内容转换为 ...

  5. Tomcat下 session 持久化问题(重启服务器session 仍然存在)

    感谢大佬:https://www.iteye.com/blog/xiaolongfeixiang-560800 关于在线人数统计,大都使用SessionListener监听器实现. SessionLi ...

  6. UIPickView的基本使用

    UIPickView和TableView一样,想要展示数据也要设置数据源和代理设置数据源self.pickView.dataSource = self;设置代理self.pickView.delega ...

  7. Apache中commons包的各种jar的功能说明

    commons-logging.jar -----记录日志,通常和  log4j.jar共同使用 commons-beanutils.jar(1.1)                主要提供Bean的 ...

  8. iOS,开发准备之申请证书 ---by吴帮雷

    一.申请真机调试证书 打开iOS Dev Center,选择Sign in,登陆(至少99美元账号),登陆选择Certificates,Identifiers & Profiles --> ...

  9. LeetCode随缘刷题之最短补全词

    package leetcode.day_12_10; import org.junit.Test; /** * 给你一个字符串 licensePlate 和一个字符串数组 words ,请你找出并返 ...

  10. Solution -「LOCAL」二进制的世界

    \(\mathcal{Description}\)   OurOJ.   给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...