leetcode笔记:Validate Binary Search Tree

news/2025/2/25 22:40:31

一. 题目描写叙述

Given a binary tree, determine if it is a valid binary search tree (BST).

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.

confused what “{1,#,2,3}” means?

二. 题目分析

这道题的大意是,推断一个二叉查找树是否合法的,这个能够依据二叉查找树的定义来进行推断,即一个内部结点的值要大于左子树的最大值,同一时候要小于右子树的最大值。

依据这个定义。能够递归得进行推断,这样的方法得时间复杂度为O(n),空间复杂度为O(logn)。这道题要注意的地方就是要记得更新以结点为父节点的树的最大值和最小值。以便递归返回时给上一个调用进行推断。

三. 演示样例代码

#include <iostream>

struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};


class Solution
{
private:
    bool isValidBST(TreeNode* root, int &MinValue, int &MaxValue)
    {
        if (!root)
        {
            return true;
        }


        if (root->left)
        {
            if (root->val <= root->left->val)
            {
                return false;
            }

            int LeftMinValue = 0;
            int LeftMaxValue = 0;
            if (!isValidBST(root->left, LeftMinValue, LeftMaxValue))
            {
                return false;
            }
            else
            {
                MinValue = LeftMinValue;
                if (LeftMaxValue != LeftMinValue)
                {
                    if (root->val <= LeftMaxValue)
                    {
                        return false;
                    }
                }
            }
        }
        else
        {
            MinValue = root->val;
        }


        if (root->right)
        {
            if (root->val >= root->right->val)
            {
                return false;
            }

            int RightMinValue = 0;
            int RightMaxValue = 0;

            if (!isValidBST(root->right, RightMinValue, RightMaxValue))
            {
                return false;
            }
            else
            {
                MaxValue = RightMaxValue;
                if (RightMaxValue != RightMinValue)
                {
                    if (root->val >= RightMinValue)
                    {
                        return false;
                    }
                }
            }
        }
        else
        {
            MaxValue = root->val;
        }

        return true;
    }

public:
    bool isValidBST(TreeNode* root)
    {
        int MinValue = 0;
        int MaxValue = 0;
        bool IsLeaf = true;

        return isValidBST(root, MinValue, MaxValue);
    }
};

http://www.niftyadmin.cn/n/711667.html

相关文章

php中的¥row,PHP PDO函数库详解

PDO是一个“数据库接见抽象层”&#xff0c;感化是同一各类数据库的接见接口&#xff0c;与mysql和mysqli的函数库比拟&#xff0c;PDO让跨数据库的应用更具有亲和力&#xff1b;与ADODB和MDB2比拟&#xff0c;PDO更高效。今朝而言&#xff0c;实现“数据库抽象层”任重而道远&…

开启Win8的无线路由器功能

2019独角兽企业重金招聘Python工程师标准>>> 如果你的机器没有无线网卡的话就不用看下面的内容了&#xff01; 1.快捷键WinX – 命令提示符(管理员&#xff09;- 输入 netsh wlan set hostednetwork modeallow ssid”Win8Me.com” key123456789 2.命令参数说明&…

eggjs增删改查MySQL,nodejs操作mysql实现增删改查

首先需要安装mysql模块&#xff1a;npm install mysql –save然后创建user数据表&#xff1a;接着使用nodejs对数据库进行增删改查&#xff1a;//引入mysql模块var mysql require(mysql);//链接数据库var connection mysql.createConnection({host:localhost,user:root,passw…

SpringBoot——SpringBoot打jar包并部署到Tomcat

1.详细步骤 首先在pom.xml文件中做一些修改&#xff1a; 之前打war包需要修改打包方式&#xff0c;这次不需要了&#xff0c;因为默认就是 jar 包指定最终打成jar包的名称手动指定 resources 文件夹编译打包的路径添加SpringBoot内嵌Tomcat解析jsp的依赖&#xff08;仅仅是为这…

《转》couldn#39;t connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145

couldnt connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145&#xff0c;有须要的朋友能够參考下。 应为昨天安装的时候没及时截图&#xff0c;语言表达有点差&#xff0c;谅解 昨天在安装mongodb的时候无故出现 couldnt connect to server 127.0.0.1:27017 …

SDL 威胁建模工具入门 threat modeling tool

http://msdn.microsoft.com/zh-cn/magazine/dd347831.aspx threat modeling tool 威胁建模工具 minifuzz 文件模糊工具 code analysis tool windows protection library 微软保护库 Web application configuration analyzer waca 网站应用程序配置分析器

SpringBoot——SpringBoot集成Thymeleaf

文章目录&#xff1a; 1.认识 Thymeleaf 2.详细步骤 2.1 创建一个SpringBoot项目 2.2 在pom.xml文件中会自动添加SpringBoot集成Thymeleaf的起步依赖 2.3 在核心配置文件中添加以下内容 2.4 写一个Controller控制层 2.5 写一个html页面 2.6 启动测试 1.认识 Thymeleaf …

Fedora mysql 不能启动,Fedora mysql修改DataDir以后无法启动

错误信息Redirecting to /bin/systemctl restart mysqld.serviceJob for mariadb.service failed. See systemctl status mariadb.service and journalctl -xn for details.调试方法1, 使用mysql_install_db. 这样会报出很多错误信息sudo mysql_install_db --usermysql --datad…