LeetCode——驗證二叉搜索樹

題目:

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

假設一個二叉搜索樹具有如下特徵:

節點的左子樹只包含小於當前節點的數。

節點的右子樹只包含大於當前節點的數。

所有左子樹和右子樹自身必須也是二叉搜索樹。

示例 1:

輸入:

     2

    / \

  1   3

輸出: true

示例 2:

輸入:

     5

    / \

 1   4

     / \

    3   6

輸出: false

解釋: 輸入爲: [5,1,4,null,null,3,6]。

根節點的值爲 5 ,但是其右子節點值爲 4 。

 

思路:

遞歸遍歷節點及其子結點fn(node,max,min):

如果node爲null,返回true;

如果node的值滿足大小限制(min<node.val<max):

    返回其左右子結點是否滿足限制fn(node.left,node.val,min)&&fn(node.right,max,node.val)(注意需要更新左右節點的值限制範圍)

如果不滿足大小限制,則返回false

 

代碼如下:

/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isValidBST = function(root) {
    let max = Infinity, min = -Infinity;
    function judge(node, max, min){
        if(node == null)return true;
        if(node.val < max && node.val > min){
            return judge(node.left,node.val,min)&&judge(node.right,max,node.val);
        }
        return false;
    }
    return judge(root, max, min);
};

代碼地址:github地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章