给定一个二叉树,判断其是否是一个有效的二叉搜索树。

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/validate-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————————————————————
解题思路:

  • 二叉搜索树的特性是对于某一节点,其左子树的所有节点的值都小于该结点,其右子树的所有节点的值都大于该节点的值。因此可以想到通过中序遍历该二叉树。
  • 二叉搜索树的中序遍历得到的数据是排序的,其值从小到大排序,如果在遍历过程中遇到某一个结点值小于前一个结点的值,则可以确定该二叉树不是二叉搜索树。

其python3代码如下:

# Definition for a binary tree node.
class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def isValidBST(self, root: TreeNode) -> bool:num = [float('-inf')]  # 用于保存最近遍历的节点的valdef midsearch(root):  # 中序遍历if not root:  # 递归停止条件return Trueif  not midsearch(root.left):  # 判断左子树是否符合二叉搜索树性质return Falseif root.val <= num[0]:  # 判断当前节点的val是否大于前一个节点的valreturn Falsenum[0] = root.val  # 将最新的节点val值更新num值if not midsearch(root.right):  # 判断右子树是否符合二叉搜索树的性质return False return Truereturn midsearch(root)

代码的时间复杂度为O(n),空间复杂度为O(n)。

leetcode —— 98. 验证二叉搜索树相关推荐

  1. Leetcode 98:验证二叉搜索树

    Leetcode 98:验证二叉搜索树 题目描述 我的解法:非递归的中序遍历 其它解法1:非递归的中序遍历,用LONG_MIN规避树的val等于INT_MIN的情况 其他解法2:递归的中序遍历思想 其 ...

  2. LeetCode 98. 验证二叉搜索树(中序遍历)

    文章目录 1. 题目信息 2. 解题 2.1 递归中序 2.2 非递归中序 1. 题目信息 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于 ...

  3. LeetCode 98 验证二叉搜索树

    题目链接:力扣 思路 递归 递归函数声明 bool isValidBST(TreeNode* root,int lower,int upper);//判断根节点是否在lower和upper之间 递归出 ...

  4. leetcode 98. 验证二叉搜索树 递归遍历左右子树和中序遍历 c语言解法

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

  5. Leetcode 98. 验证二叉搜索树 (每日一题 20210810)

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

  6. LeetCode 98. 验证二叉搜索树 思考分析

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

  7. leetcode - 98. 验证二叉搜索树

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

  8. LeetCode 98. 验证二叉搜索树(递归)(迭代)

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

  9. Leetcode 98. 验证二叉搜索树 解题思路及C++实现

    解题思路: 分别验证root的左右子树是否是二叉树,同时,左子树的最大值要小于root->val,右子树的最小值要大于root->val. 在左右子树中,一直向root的左子树探索,就能得 ...

最新文章

  1. 2016 ACM / ICPC Asia dalian Regional Contest 题解(11 / 11)【每日亿题2021 / 2 / 17】
  2. linux gzip 命令简介
  3. .NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务
  4. ENVI扩展工具:利用波段运算修改NaN方法总结
  5. csv格式清洗与转换python123,Python Pandas 清理错误格式数据
  6. 云原生2.0时代:企业更应了解一下容器安全
  7. 图文并茂带你迅速了解本科、硕士、博士的区别
  8. 如何在solarwinds中自定义 OID
  9. css系统自带字体_CSS系统字体
  10. DB9标准的公头\母头接线定义
  11. Python数学建模 缺失值与异常值处理
  12. Android Studio Design界面不显示控件的解决方法
  13. 功率放大电路工作状态
  14. AnimationController
  15. EMI、EMS和EMC
  16. ABAP 计算汇率的方法
  17. 解决Failed to load resource: net::ERR_CONNECTION_TIMED_OUT
  18. 【C语言基础-」TurboC环境】-」bioskey函数详细分析
  19. 复选框如何实现单选框效果
  20. 微信小程序开发之如何哪获取微信小程序的APP ID

热门文章

  1. morphological antialiasing
  2. Silverlight.XNA(C#)跨平台3D游戏研发手记:(一)差集运算在SLG战斗范围设定中的应用...
  3. 容器编排技术 -- Kubernetes 给容器和Pod分配CPU资源
  4. Spring ORM示例 - JPA,Hibernate,Transaction
  5. Spring Cloud Consul 基础使用介绍
  6. 【Java】while和do-while循环比较测试案例
  7. “SqlNullValueException: Data is Null. This method or property cannot be called on Null values.”的解决方案
  8. redis-Set集合操作SADD,SMEMBERS,scard,srem
  9. 感谢相信你鼓励你的人
  10. 如何在Postgresql中使用模糊字符串匹配