首页 > 其他分享 >98. 验证二叉搜索树

98. 验证二叉搜索树

时间:2024-12-04 19:43:04浏览次数:8  
标签:return val 验证 inorder long 二叉 98 root

问题描述

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

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

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

分析

可以使用递归解决。要注意结点的左子树中每个结点都要小于当前结点,而不仅仅是下一层的结点,所以递归时要传递边界值,便于比较。

也可以利用性质:BST的中序遍历一定是升序序列,使用栈或者其他方法解题。

法一、递归

class Solution {
public:
    const long long SMALL = -2e10;
    const long long BIG = 2e10;
    bool solve(TreeNode* root, long long l, long long r) {
        if (root == nullptr) {
            return true;
        }
        if (root->val >= r || root->val <= l) {
            return false;
        }
        if (solve(root->left, l, root->val) && solve(root->right, root->val, r)) {
            return true;
        } else {
            return false;
        }
    }
    bool isValidBST(TreeNode* root) {
        return solve(root, SMALL, BIG);
    }
};

法二、利用BST中序遍历性质解题

class Solution {
public:
    vector<int> v;
    void travel_inorder(TreeNode* root) {
        if (root == nullptr) {
            return ;
        }
        travel_inorder(root->left);
        v.push_back(root->val);
        travel_inorder(root->right);
    }
    bool isValidBST(TreeNode* root) {
        travel_inorder(root);
        for (int i = 1; i < v.size(); i++) {
            if (v[i] <= v[i-1]) {
                return false;
            }
        }
        return true;
    }
};

标签:return,val,验证,inorder,long,二叉,98,root
From: https://www.cnblogs.com/saulstavo/p/18587034

相关文章

  • 【hot100】二叉树
    文章目录94.二叉树中序遍历(迭代做法是重点)递归解法普通迭代做法morris解法102.二叉树的层序遍历广度优先遍历104.二叉树的最大深度递归做法—深度优先搜索226.翻转二叉树递归解法101.对称二叉树递归做法迭代做法543.二叉树的直径递归做法108.将有序数组转换......
  • 代码随想录算法训练营第十六天(LeetCode513.找树左下角的值;LeetCode112.路径总和;LeetCo
    LeetCode513.找树左下角的值题目连接:找树左下角的值题目连接代码递归法/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.......
  • DrissionPage 过滑动验证码
    首先安装:DrissionPagepipinstallDrissionPage安装ddddocr:pipinstallddddocr代码示例:fromDrissionPageimportChromiumPage,ChromiumOptionsimportrandomimporttimeimportddddocr#浏览器路径path=r'C:\ProgramFiles\Google\Chrome\Application\chro......
  • 数据结构与算法-04二叉树-01
    初识二叉树(Binary)树结构树是由n(n≥0)个结点组成的有限集合。当n=0时,称为空树;当n>0时,有一个特殊的节点称为根结点(root),它没有前驱结点;其它结点分为m棵互不相交的子树。什么是二叉树?二叉树是一种最典型的非线性结构,除叶节点外每个节点最多连接两个子节点......
  • 94. 二叉树的中序遍历
    题目:https://leetcode.cn/problems/binary-tree-inorder-traversal/description/思路:中序遍历非递归算法Java代码如下:importjava.util.*;classTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.val=val;}TreeNode(intva......
  • 全面解析二叉树的层次遍历及其实现
    二叉树的层次遍历(LevelOrderTraversal)是以层为单位,从根节点开始逐层访问节点的遍历方法。在很多树的算法中,层次遍历是基础。本文将详细解析层次遍历的原理,提供Java和Python的实现,以及常见扩展应用。一、层次遍历的定义与特点1.1什么是层次遍历?层次遍历是指按照二叉......
  • LCR 043.完全二叉树(中等)(主站919)
    https://leetcode.cn/problems/NaqhDT/https://leetcode.cn/problems/complete-binary-tree-inserter/难度:☆☆☆题目:完全二叉树是每一层(除最后一层外)都是完全填充(即,节点数达到最大,第n层有2n-1个节点)的,并且所有的节点都尽可能地集中在左侧。设计一个用完全二叉树......
  • Sitecore CMS 未经身份验证任意文件读取漏洞复现(CVE-2024-46938)
    0x01产品描述:        SitecoreExperiencePlatform™(XP)是一款基于.NETWebForm技术构建的内容管理系统,可以将客户数据、分析、人工智能与营销自动化功能相结合,在任何渠道上实时提供个性化的内容,从而在客户旅程中与客户建立良好的关系。0x02漏洞描述:     ......
  • BMP 文件可能带来的攻击面和漏洞,用户和开发人员可以采取更有效的安全措施,降低通过图像
    BMP文件(即位图文件)理论上可以被插入恶意代码。虽然BMP文件本身通常是图像文件格式,并不直接执行代码,但黑客可以利用文件格式的某些特性,将恶意代码嵌入其中,通过特定的漏洞或技术来利用这个文件进行攻击。以下是可能的几种情况:1. 文件格式中的元数据BMP文件可以包含额外的元......
  • 二叉树的概念及其在Java中的实现
    文章目录什么是二叉树?二叉树的特点:二叉树的定义Java中实现二叉树1.定义二叉树节点2.创建二叉树类并添加插入方法3.遍历方法4.查找特定值的方法什么是二叉树?二叉树(BinaryTree)是一种非线性数据结构,它由一组有限数量的节点组成,这组节点或者为空(即没有节点),或者......