LeetCode :: Validate Binary Search Tree[具体分析]

LeetCode :: Validate Binary Search Tree[具体分析]

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node’s key.
  • The right subtree of a node contains only nodes with keys greater than the node’s key.
  • Both the left and right subtrees must also be binary search trees.
回想一下BST的定义,任一节点的子孙分别递归满足。左子孙小于该节点,右子孙大于该节点。仅仅要推断这个就OK了;
一个主意点:在递归程序里面。仅推断一个节点大于左儿子小于右儿子是不够的,这样对于左儿子的右儿子以及右儿子的左儿子的
错误推断不到,因此须要将节点值变为边界值,递归下传;
代码例如以下:

class Solution {
public:
    bool isValidBST(TreeNode *root) {
        return check(root, INT_MIN, INT_MAX);
    }
    
private:
    bool check(TreeNode *root, int left, int right){
        if(root == NULL)
            return true;
        return (root->val > left) && (root->val < right) 
               && check(root->left, left, root->val) &&check(root->right, root->val, right); 
    }//这里的左儿子的左界用上面传下来的,右界用节点值,右儿子镜面对称
};


PS:依照注意点提到的思路写的
错误
代码

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isValidBST(TreeNode *root) {
        if (root == NULL)
            return true;
            
        bool bleft = true, bright = true;
        if (root->left != NULL){
            if (root->val > root->left->val){    //注意这里检验以及递归是不能保证根节点大于左边全部的。矛盾在于,左儿子的右儿子,以及右儿子的左儿子。
                bleft = isValidBST(root->left);
            }
            else{
                return false;
            }
        }
        
        if (root->right != NULL){
            if (root->val < root->right->val){
                bright = isValidBST(root->right);
            }
            else{
                return false;
            }
        }
        return bleft && bright;
    }
};


版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117593.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 史上最全的nginx安全访问控制配置

    史上最全的nginx安全访问控制配置

    2022年2月14日
    46
  • idea激活码在哪输入2022【2022.01最新】2022.02.03

    (idea激活码在哪输入2022)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlCJ…

    2022年3月31日
    229
  • IDEA循环MAP的快捷键和自己常用的循环MAP方式

    IDEA循环MAP的快捷键和自己常用的循环MAP方式IDEA循环Map的快捷方式,IDEA快捷键map.keySet().iter循环输出Map的key键IDEA快捷键map.values().iter循环输出Map的key的value值//循环mapfor(Strings:map.keySet()){//输出map中keySystem.out.println(s);//获取map中key的valuemap.get(s);}这种循环不需要考虑越界问

    2022年8月31日
    8
  • Oracle数据库备份与还原语句

    Oracle数据库备份与还原语句1、备份语句(数据库导出)expusername/password@ip:port/servernamefile=”C:\Users\Administrator\Desktop\kpms.bak”full=yignore=y;2、导入语句(数据库还原)①全部导入:imp用户名/密码@数据库实例名full=yfile=C:\Users\Administrator\Desktop\kpms.bakignore=y;②单表导入:impusername/password@ip:p..

    2022年7月12日
    71
  • java 应用监控_java监控服务器运行状态

    java 应用监控_java监控服务器运行状态每天记录学习,每天会有好心情。*^_^*每天都要认真学习,才能更加进步。└(^o^)┘在工作和学习的过程中要善于思考,勤于学习。并做出适当的记录,才能最快速的学习并掌握一项知识。希望在这个平台和大家一起共同成长,和大家分享一个SSM(MYECLIPSE)项目,该项目名称为基于web的java舆情监测系统。采用当前非常流行的B/S体系结构,以JAVA作为开发技术,主要依赖SSM技术框架,mysql数…

    2025年11月29日
    8
  • TI DSP 28335 自学之路,到此止步[通俗易懂]

    TI DSP 28335 自学之路,到此止步[通俗易懂]学DSP强烈推荐顾卫钢的书。TI官网的例程相当规范,推荐大家都能去看一看源码。此篇正式宣告我的DSP自学之路到此就告一段落了。以后工作很可能用不到28335,无论如何,学一点是一点,总归是没坏处。毕业前如有精力再买块FPGA开发板学习一下。愿所有人的未来都是光明一片!

    2022年5月27日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号