1. 程式人生 > >leetcode - 驗證二叉搜索樹

leetcode - 驗證二叉搜索樹

pre param 校驗 lse 特征 boolean nor == ++

給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。

一個二叉搜索樹具有如下特征:

  • 節點的左子樹只包含小於當前節點的數。
  • 節點的右子樹只包含大於當前節點的數。
  • 所有左子樹和右子樹自身必須也是二叉搜索樹。

示例:

    輸入:
         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 - 驗證二叉搜索樹