[Leetcode] Validate BST

给一个Binary Tree,检查是不是Binary Search Tree. 即是否满足对每个节点,左子树的中的所有节点的值 < 当前节点的值 < 右子树所有节点的值。

Solution #1, 用中序遍历。因为中序遍历是DFS的一种,Time complexity: O(N), space complexity: O(logN)

public class Solution {
    
    int lastCheck = Integer.MIN_VALUE;
    
    public boolean isValidBST(TreeNode root){
        if(root == null)
            return true;
        
        if(!isValidBST(root.left)){
            return false;
        }
        
        if(lastCheck >= root.val){ // only 'Less than' is valid
            return false;
        }
        
        lastCheck = root.val;
        
        return isValidBST(root.right);
    }

}

Solution #2:

为每个节点施加一个取值范围 (min, max). 从根节点一步一步往下递归的时候不断的更新(缩小)这个范围。

class Solution{
    
    public boolean isValidBST(TreeNode node){
        return isValidBST(node, Integer.MAX_VALUE, Integer.MIN_VALUE);
    }
    
    private boolean isValidBST(TreeNode node, int max, int min){
        if(node == null)
            return true;
        
        if(min < node.val  && node.val < max){
            return isValidBST(node.left, node.val, min) &&
                    isValidBST(node.right, max, node.val);
        }else{
            return false;
        }
    }
    
}
原文地址:https://www.cnblogs.com/Antech/p/3705981.html