复用left[],【时间击败73.33%】——》【时间击败99.72%】
【内存击败36.17%】——》【内存击败94.23%】
dfs(r)返回值=new long[]{包括r节点的子树所有节点的最小值,包括r节点的子树所有节点的最大值}
1 boolean ans = true; 2 3 public boolean isValidBST(TreeNode root) { 4 if (root == null) return true; 5 dfs(root); 6 return ans; 7 } 8 9 long[] dfs(TreeNode r) { 10 long[] T = new long[]{Long.MAX_VALUE, Long.MIN_VALUE}; 11 if (ans == false) return T; 12 if (r == null) return T; 13 long[] left = dfs(r.left); 14 long[] right = dfs(r.right); 15 if (!(left[1] < r.val && r.val < right[0])) { 16 ans = false; 17 return T; 18 } 19 left[0]=Math.min(left[0], r.val); 20 left[1]=Math.max(right[1], r.val); 21 return left; 22 }