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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu安装pycharm快捷图标_pycharm快捷方式找不到了

    ubuntu安装pycharm快捷图标_pycharm快捷方式找不到了1、首先下载pycharm安装包,从官网下载,选择专业版。2、解压到一个文件夹,打开bin文件夹,命令行下运行pycharm.sh文件。sh./pycharm.sh3、然后出现安装过程,一步一步走下去就行,如果中间问是否需要加载以前的设置(如果以前安装过),可以加也可以不加。4、激活码选择企业版,可以输入:http://idea.imsxm.com/5、完成安装。但是这样每次打开pycharm,需

    2022年8月26日
    7
  • win10键盘win键失效了[通俗易懂]

    win10键盘win键失效了[通俗易懂]与系统无关,应该是键盘关闭了win键。按Fn+windows键启用/关闭windows键,  

    2022年5月4日
    55
  • vscode前端插件安装「建议收藏」

    vscode前端插件安装「建议收藏」1.修改语言,如果英语六级的话,便就可以不用修改,按住ctrl+shift+x打开拓展,安装LanguagePacks插件,然后按住Ctrl+Shift+P打开命令调色板,搜索ConfigureDisplayLanguage命令然后按Enter键,将locale.json创建一个文件,其默认值设置为您的操作系统语言。修改为zh-cn语言即可。2.HTMLSnippets:超级实用且初级的H5代码片段以及提示;3.HTMLHint:html代码检测;4.HTMLCSSSupp

    2022年7月25日
    13
  • conda安装tensorflow-cpu

    conda安装tensorflow-cpu把之前的清空condauninstallxxx安装condainstall–channelhttps://conda.anaconda.org/HCCtensorflow试了很多镜像都不行,只有这个可以安装完,importtensorflow报错卸载h5py,重装condauninstallh5pycondainstallh5pydone…

    2022年6月16日
    65
  • java 取系统当前时间_java获取当前系统时间方法

    java 取系统当前时间_java获取当前系统时间方法importjava.text.SimpleDateFormat;importjava.util.Calendar;方法一:SimpleDateFormatsdf=newSimpleDateFormat(“yyyy-MM-ddHH:mm:ss”);Stringly_time=sdf.format(newjava.util.Date());System.out.println(…

    2022年10月19日
    3
  • 关于PHP程序员技术职业生涯规划

    关于PHP程序员技术职业生涯规划

    2021年10月15日
    40

发表回复

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

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