• LeetCode 98 验证二叉搜索树


    给定一个二叉树,判断其是否是一个有效的二叉搜索树。

    假设一个二叉搜索树具有如下特征:

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

    示例 1:

    输入:

        2
       / 
      1   3
    

    输出: true

    示例 2:

    输入:

        5
       / 
      1   4
         / 
        3   6
    

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

    1. 中序遍历二叉搜索树=>有序数组

    /**
     * Definition for a binary tree node.
     * function TreeNode(val) {
     *     this.val = val;
     *     this.left = this.right = null;
     * }
     */
    /**
     * @param {TreeNode} root
     * @return {boolean}
     */
    var isValidBST = function(root) {
        let nums = [];
        let func = (root) => {
            root.left && func(root.left);
            nums.push(root.val);
            root.right && func(root.right);
        }
        root && func(root);
        for(let i = 0; i < nums.length; i++) {
            if(nums[i] >= nums[i + 1]) return false;
        }
        return true;
    };
    

    2. 递归解决

    /**
     * Definition for a binary tree node.
     * function TreeNode(val) {
     *     this.val = val;
     *     this.left = this.right = null;
     * }
     */
    /**
     * @param {TreeNode} root
     * @return {boolean}
     */
    var isValidBST = function(root) {
        return helper(root, -Infinity, Infinity);
    };
    
    var helper = function(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);
    }
    
  • 相关阅读:
    代码间距的由来和解决方法
    径向渐变
    倒计时原理
    javascript原型模式理解
    倒计时原理和折叠收缩
    highcharts注意事项
    jsp注释前台不可见
    启动Tomcat任何程序都报错
    面试题
    eclipse不自动弹出提示(alt+/快捷键失效)
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13489659.html
Copyright © 2020-2023  润新知