码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode - 验证二叉搜索树

时间:2018-07-23 11:11:55      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:大于   中序   一个   etc   节点   校验   依次   boolean   lse   

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

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

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

示例:

    输入:
         2
        /        1   3
    输出: true

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

思路:

  • 利用二叉搜索树的左子树完全小于根节点且右子树完全大于根节点的特性。
  • 二叉搜索树在中序遍历下得到一个有序的数组,然后遍历数组值是否依次递增。

实现:

    /**
    * 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) {

        if(root == null){
            return true;
        }

        let nums = [];

        let isValid = true;

        //中序遍历
        const inOrder = (node) => {
            if(node){
                inOrder(node.left);
                nums.push(node.val);
                inOrder(node.right);

            }
        }

        inOrder(root);

        //校验是否有序
        for (let i = 1; i < nums.length; i++) {
            if (nums[i] <= nums[i - 1]) {
                isValid = false;
            }
        }

        return isValid;

    }

leetcode - 验证二叉搜索树

标签:大于   中序   一个   etc   节点   校验   依次   boolean   lse   

原文地址:https://www.cnblogs.com/jianzhihao/p/9352877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!