[路飞]_面试题 04.05. 合法二叉搜索树

110 阅读1分钟

题目介绍

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

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

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

解题思路

递归思路,搜索二叉本质是左子树要比根节点小,根节点比右子树小, 所以定义一个辅助函数,函数的参数有节点、最小值、最大值。递归判断,节点的值是否大于或者等于大值,或者小值是否小于等于小值,如果是就返回false

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */

const helper = (root, lower, upper) => {
    if (root === null) {
        return true;
    }
    if (root.val <= lower || root.val >= upper) {
        return false;
    }
    return helper(root.left, lower, root.val) && helper(root.right, root.val, upper);
}
var isValidBST = function(root) {
    return helper(root, -Infinity, Infinity);
};