[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;

        }

    }

    

}

 

你可能感兴趣的:(LeetCode)