zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    Java数据类型+练习
    在vue中使用echars不能自适应的解决方法
    使用js将Unix时间戳转换为普通时间
    vue-router2.0二级路由的简单使用
    vue父组件向子组件传递参数
    vue子组件向父组件传递参数的基本方式
    vuex----mutation和action的基本使用
    vuex----------state的基础用法
    数组判断重复
    在vue项目中快速使用element UI
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13489659.html
Copyright © 2011-2022 走看看