98. 验证二叉搜索树

98. 验证二叉搜索树

题目

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

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

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

示例 1:
98. 验证二叉搜索树_第1张图片

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

示例 2:
98. 验证二叉搜索树_第2张图片

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

提示:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/validate-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

搜索二叉树最大的一个特点就是中序遍历结果数组是升序数组

在中序遍历的过程中,如果当前节点的值大于数组中最后一个元素的值,那说明是升序数组,将当前节点值加入数组中。反之说明不是升序,直接返回false。
可以发现其实当前值至于数组中最后一个元素的值有关,所以为了节约空间,我们可以使用一个变量pre来存储数组中最后一个元素的值。

var isValidBST = function(root) {
    let pre = -Infinity ;
       function dfs(root){ //中序遍历
        if(root==null) return true;
        if(!dfs(root.left)) return false; //左
        if(root.val<=pre) return false; //如果不是升序就返回false
        pre = root.val;//更新最后一个数 
        return dfs(root.right);
    }
    return dfs(root);
 
};

你可能感兴趣的:(算法,深度优先,leetcode,算法)