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;
    }
};


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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • HTML5触摸事件(touchstart、touchmove和touchend)

    HTML5触摸事件(touchstart、touchmove和touchend)HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件:touchstart、touchmove和touchend。  一开始触摸事件touchstart、touchmove和touchend是iOs版Safari浏览器为了向开发人员

  • 图片的放大与缩小_photoshop怎么放大图片

    图片的放大与缩小_photoshop怎么放大图片packagecom.school.util;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.image.Buffere

  • java的nextline_java中的nextline()「建议收藏」

    java的nextline_java中的nextline()「建议收藏」今天在java上机课时遇到了个小问题,使用Scanner输入数据时,使用了一次nextInt(),一次nextLine(),却只接收了一个整数。代码如下code1:1packagecn.dx;23importjava.util.Scanner;45publicclassScannerTest{67publicstaticvoidmain(String[]args)…

  • 用户体验–NPS&满意度指标[通俗易懂]

    用户体验–NPS&满意度指标[通俗易懂]一、NPS1.什么是NPS值?NPS值(NetPromoterScore,净推荐值)是度量“客户向他人推荐某品牌/产品/服务倾向”的指标,是当前国际通用的衡量客户行为忠诚的核心指标,本质上是一种客户口碑及行为忠诚2.为什么要持续监控NPS?通过教育行业调研发现,口碑推荐是用户愿意体验尝试产品的最主要、也是最为信任的渠道,同时也是在促进用户购买决策中起到至关重要的作用,因此要持续监控NPS指标,营造口碑效应3.NPS得分如何获取?目前业务NPS均通过产品化手段实现NPS调研问卷的回收,.

  • Linux Oracle 创建用户

    Linux Oracle 创建用户1、启动Oracle(Oracle没启动的情况下)su-oracle,切换成oracle用户lsnrctlstartsqlplus/nologconn/assysdbastartup(若数据库处于启动状态,则无需再次启动)2、查询临时表空间和表空间的存储位置selectnamefromv$tempfile;selectnamefromv$datafile从结果可以看出有…

  • xsrf form html,python – tornado开启了xsrf_cookies,在ckeditor中上传文件如何传入xsrf_form_html()?…

    xsrf form html,python – tornado开启了xsrf_cookies,在ckeditor中上传文件如何传入xsrf_form_html()?…tornado在setting中设置了”xsrf_cookies”:True,则需要在表单中添加{%modulexsrf_form_html()%}。但ckeditor如何传xsrf_cookies这个值,每次上传图片都显示’_xsrf’argumentmissingfromPOST。如果把”xsrf_cookies”设置为False则上传成功。下面是上传的代码classcku…

发表回复

您的电子邮箱地址不会被公开。

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