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