[路飞]leetcode-04.05.合法二叉搜索树

81 阅读1分钟

实现一个函数,检查一棵二叉树是否为二叉搜索树。力扣原文

示例 1:

输入: 
    2
   / \
  1   3
输出: true

示例 2:

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

解题

递归:

function isValidBST(root, lower = -Infinity, upper = Infinity) {
    if (!root) return true
    
    return root.val > lower &&
        root.val < upper &&
        isValidBST(root.left, lower, root.val) &&
        isValidBST(root.right, root.val, upper)
}

中序遍历:

function isValidBST(root) {
    let pre=-Infinity
    let stack=[]
    while(stack.length>0||root){
        while(root){
            stack.push(root)
            root=root.left
        }
        root=stack.pop()
        if(root.val<=pre)return false
        pre=root.val
        root=root.right
    }
    return true
}