98.验证二叉搜索树

给你一个二叉树的根节点 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 };
复制代码
posted @   icyyyy  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示