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

98.验证二叉搜索树

时间:2022-11-03 14:14:06浏览次数:87  
标签:right val 验证 二叉 98 null root 节点 left

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

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

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

示例 1:

输入:root = [2,1,3]
输出:true
示例 2:

 

 

 

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示:

  • 树中节点数目范围在[1, 104] 内
  • -231 <= Node.val <= 231 - 1

方法一:递归

时间复杂度:O(n)

空间复杂度:O(n)

 1 /**
 2  * Defination for a binary tree node.
 3  * function TreeNode(val,left,right){
 4  * this.val=(val===undefined?0:val)
 5  * this.left=(left===undefined?null:left)
 6  * this.right=(right===undefined?null:right)
 7  * }
 8  */
 9 /**
10  * @param {TreeNode} root
11  * @param {boolean}
12  */
13 const helper = (root, lower, upper) => {
14     if (root === null) {
15         return true;
16     }
17     if (root.val <= lower || root.val >= upper) {
18         return false;
19     }
20     return (
21         helper(root.left, lower, root.val) && helper(root.right, root.val, upper)
22     );
23 };
24 var isValidBST = function(root) {
25     return helper(root, -Infinity, Infinity);
26 };

方法二:中序遍历

时间复杂度:O(n)

空间复杂度:O(n)

 1 /**
 2  * Defination for a binary tree node
 3  * function TreeNode(val,left,right){
 4  * this.val=(val===undefined?0:val)
 5  * this.left=(left===undefined?null:left)
 6  * this.right=(right===undefined?null:right)
 7  * }
 8  */
 9 /**
10  * @param {TreeNode} root
11  * @return {boolean}
12  */
13 
14 var isValidBST = function(root) {
15     let stack = [];
16     let inorder = -Infinity;
17     while (stack.length || root !== null) {
18         while (root !== null) {
19             stack.push(root);
20             root = root.left;
21         }
22         root = stack.pop();
23         //如果中序遍历得到的节点值小于等于前一个inorder,说明不是二叉搜索树
24         if (root.val <= inorder) {
25             return false;
26         }
27         inorder = root.val;
28         root = root.val;
29     }
30     return true;
31 };

标签:right,val,验证,二叉,98,null,root,节点,left
From: https://www.cnblogs.com/icyyyy/p/16854251.html

相关文章

  • leetcode257-二叉树的所有路径
    257.二叉树的所有路径 泪目,自己写出的递归遍历./***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*......
  • leetcode - 617. 合并二叉树
    617.合并二叉树classSolution{//迭代publicTreeNodemergeTreesWithStack(TreeNoderoot1,TreeNoderoot2){//如果当前root左右子树有一个是空......
  • 力扣 二叉树 算法+题目 整理
    二叉树基础包括三种遍历,建树和遍历的方法。二叉树遍历力扣144,94,145二叉树前中后序遍历使用递归或者迭代空间复杂度都是o(n),而通过morris遍历则可以达到o(1),其介绍......
  • 浏览器上验证xpath元素是否正确
    一、验证元素定位Chrome的console可以用来验证XPath和CSS。1.验证XPath1.输入:$x(“your_xpath_selector”)2.输入完毕后,点击回车键;如果你的语句是正确的,会返回该css对......
  • mysql 查询30分钟内的验证码
    mysql查询30分钟内的验证码 selectt.`value`as`value`fromt_message_infot wheret.user_name=13072281151ANDt.`key`=1ANDt.is_use=0ANDt.crea......
  • leetcode-104. 二叉树的最大深度
    题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,......
  • 如何生成炫酷的词云(已验证)
    wordcloud是什么?wordcloud是python的一个第三方库,称为词云也叫做文字云,是根据文本中的词频,对内容进行可视化的汇总,可以用来绘制用户画像。安装wordcloud这里用conda新建......
  • 在使用mstsc远程连接Windows 2016 Server服务器时报错“出现身份验证错误 要求的函数
    问题描述:在使用mstsc远程连接Windows2016Server服务器时报错“出现身份验证错误要求的函数不受支持……”,如下所示:解决方案:在windows2016server服务器远程设置上不勾......
  • acwing298 围栏
    有 NN 块木板从左到右排成一行,有 MM 个工匠对这些木板进行粉刷,每块木板至多被粉刷一次。第 ii 个木匠要么不粉刷,要么粉刷包含木板 Si 的,长度不超过 Li 的连续的......
  • 力扣 257. 二叉树的所有路径
    257.二叉树的所有路径给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点是指没有子节点的节点。示例1:输入:root=[1......