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