• LeetCode验证二叉搜索树


    给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树

    有效 二叉搜索树定义如下:

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

    示例 1:


    输入:root = [2,1,3]
    输出:true
    示例 2:


    输入:root = [5,1,4,null,null,3,6]
    输出:false
    解释:根节点的值是 5 ,但是右子节点的值是 4 。

    提示:

    树中节点数目范围在[1, 104] 内
    -2^31 <= Node.val <= 2^31 - 1

    本题思路

    其实本题需要懂得二叉搜索树的特殊性,其实我们只需要遍历二叉树,然后两个标记,一个最大和一个最小,我们划分出区段,也就是下面的值必须在这个区段才符合规则,如果不满足即返回false

    接下来,问题就是我们如何知道范围为多少,其实也很好理解,如果是左子树,那么下面肯定是越来越小,那最大值其实就是上一个父节点的值,如果是右子树,那么下面肯定是越来越大,那么最小值其实也是上一个父节点,按照这个约束向下约束即可

    下面上代码

    1. class Solution {
    2. public boolean isValidBST(TreeNode root) {
    3. return isValid(root,null,null);
    4. }
    5. public boolean isValid(TreeNode p,Integer max,Integer min){
    6. if(p==null){
    7. return true;
    8. }
    9. //如果不为空就比较
    10. if(min!=null&&p.val<=min){
    11. return false;
    12. }
    13. if(max!=null&&p.val>=max){
    14. return false;
    15. }
    16. //所有子树的子树也是二叉搜索树
    17. return isValid(p.left,p.val,min)&&isValid(p.right,max,p.val);
    18. }
    19. }

    其实到现在我们也就可以发现一件事,那就是如果以父节点为界的话左边小于它,右边大于他,如果是一棵二叉搜索树的话,那么其中序遍历的结果就一定是升序的,那么这边就有第二种解法,中序遍历出序列,而后检查是否为升序,即可判断。这边博主就不贴出代码了,感兴趣的小伙伴可以试试看哦。

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

  • 相关阅读:
    sed的介绍及应用
    三体系ISO认证是什么?能给企业带来哪些好处?
    python_栈的应用:中缀表达式转换为后缀表达式
    【Web安全】点击劫持漏洞
    基于Python3.6配置开发环境
    Java学习之继承二细节(学习重点)
    照明行业S2B2B解决方案:高效赋能产业供应链,提升企业经济效益
    APO的全面进化之路(2):走向IBP、建设端到端供应链计划体系
    通用后台管理系统前端界面Ⅸ——数据表格渲染及处理+前端分页
    mysql外键
  • 原文地址:https://blog.csdn.net/qq_51260764/article/details/126917772