【LeetCode】判斷一個二叉樹是否爲二叉搜索樹

LeetCode98. 驗證二叉搜索樹

題目描述:

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

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

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

輸入:
    4
   / \
  1   6
     / \
    5   7
輸出: false
解釋: 輸入爲: [5,1,6,null,null,5,7]。
     根節點的值爲 4 ,但是其右子樹的左子節點值爲5。沒有小於根節點,不是二叉搜索樹。

解題

分析:

要考慮到全部左子節點小於根節點。上面的例子,是一個很好的反例。那麼遞歸時,按照中序遍歷,判斷當前節點是否大於中序遍歷的前一個節點,如果大於,說明滿足 BST,繼續遍歷;否則直接返回 false。

class Solution {
    long pre = Long.MIN_VALUE;
    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }
        // 訪問左子樹
        if (!isValidBST(root.left)) {
            return false;
        }
        // 訪問當前節點:如果當前節點小於等於中序遍歷的前一個節點,說明不滿足BST,返回 false;否則繼續遍歷。
        if (root.val <= pre) {
            return false;
        }
        pre = root.val;
        // 訪問右子樹
        return isValidBST(root.right);
    }
}

                                                                                                                                                                                              JD3
鏈接:https://leetcode-cn.com/problems/validate-binary-search-tree
 

 

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