【路飞】算法与数据结构-面试题 04.05. 合法二叉搜索树

86 阅读1分钟

不管全世界所有人怎么说,我都认为自己的感受才是正确的。无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢的怎么也长久不了。

LeetCode:原题地址

题目要求

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

示例 1:

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

示例 2:

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

思路

  • 中序遍历二叉搜索树,得到的是一个严格递增的序列
  • 若进行中序遍历,当前值小于等于上一个值,不递增,肯定不是二叉搜索树

代码

const isValidBST = root => {
    let preVal = -Infinity;
    const inOrder = root => {
        if (!root) return true;
        const L = inOrder(root.left);
        // 当前值小于等于上一个值,不递增,肯定不是二叉搜索树
        if (root.val <= preVal) return false;
        preVal = root.val;
        const R = inOrder(root.right);
        // 左右子树都要是二叉搜索树
        return L && R;
    };
    return inOrder(root);
};