一开始以为是题目SB,只是简单比较了父节点和子节点的值。结果发现原来是自己SB了,除了考虑父节点,还要考虑祖先节点的值,所以要用两个参数来记录每个节点valid的范围(根据父节点的值来不断调整)。
public class Solution { public boolean isValidBST(TreeNode root) { if(root == null) return true; return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE); } public boolean isValidBST(TreeNode node, long min, long max){ if (node.left != null && (node.left.val >= node.val || node.left.val >= max || node.left.val <= min)) return false; if (node.right != null && (node.right.val <= node.val || node.right.val <= min || node.right.val >=max)) return false; if(node.left != null) { if(isValidBST(node.left, min, (max < node.val) ? max : node.val ) == false) return false; } if(node.right != null) { if(isValidBST(node.right, (min > node.val) ? min : node.val, max ) == false) return false; } return true; } }