LeetCode 98. 驗證二叉搜索樹 中序遍歷二叉樹
題目
給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。
假設一個二叉搜索樹具有如下特徵:
節點的左子樹只包含小於當前節點的數。
節點的右子樹只包含大於當前節點的數。
所有左子樹和右子樹自身必須也是二叉搜索樹。
示例 1:
輸入:
2
/ \
1 3
輸出: true
示例 2:
輸入:
5
/ \
1 4
/ \
3 6
輸出: false
解釋: 輸入爲: [5,1,4,null,null,3,6]。
根節點的值爲 5 ,但是其右子節點值爲 4 。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/validate-binary-search-tree
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
思路
中序遍歷,正好就是從左子樹到右子樹按查找二叉樹大小順序進行輸出。每訪問一個節點,並判斷成功,就將該節點
值放置爲pre,通過判斷pre和當前節點的大小輸出條件。第一個節點的pre可以設置成最小值。測試數據會卡
Integer.MIN_VALUE,這裏用long去比較
代碼
class Solution {
long pre=Long.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
return isOkay(root);
}
public boolean isOkay(TreeNode root){
if(root==null)return true;
boolean value=isOkay(root.left);
if(value ==false)return false;
if(pre >=root.val)return false;
pre=root.val;
return isOkay(root.right);
}
}