lintcode(95)驗證二叉查詢樹
阿新 • • 發佈:2018-12-24
描述:
給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST)
一棵BST定義為:
- 節點的左子樹中的值要嚴格小於該節點的值。
- 節點的右子樹中的值要嚴格大於該節點的值。
- 左右子樹也必須是二叉查詢樹。
- 一個節點的樹也是二叉查詢樹。
樣例:
一個例子:
2
/ \
1 4
/ \
3 5
上述這棵二叉樹序列化為 {2,1,4,#,#,3,5}
.
思路:
逐一排除 一旦不符合就返回false 參考網上程式碼
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } * */ public class Solution { /** * @param root: The root of binary tree. * @return: True if the binary tree is BST, or false */ public int lastVal = Integer.MAX_VALUE; public boolean firstNode = true; public boolean isValidBST(TreeNode root) { // write your code here if(root == null){ return true; } if(!isValidBST(root.left)){ return false; } if(!firstNode && lastVal >= root.val){ return false; } //此時 root.val>=lastval 是右子樹 firstNode = false; lastVal = root.val; if(!isValidBST(root.right)){ return false; } return true; } }