1. 程式人生 > >lintcode(95)驗證二叉查詢樹

lintcode(95)驗證二叉查詢樹

描述:

給定一個二叉樹,判斷它是否是合法的二叉查詢樹(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;
    }
}