1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
class Solution { int ans; final int INF = 1 << 30;
public int maxSumBST(TreeNode root) { dfs(root); return ans; }
private int[] dfs(TreeNode root) { if (root == null) { return new int[] {1, INF, - INF, 0}; } var l = dfs(root.left); var r = dfs(root.right); int v = root.val; if (l[0] == 1 && r[0] == 1 && l[2] < v && r[1] > v) { int s = v + l[3] + r[3]; ans = Math.max(ans, s); return new int[] {1, Math.min(l[1], v), Math.max(r[2], v), s}; } return new int[4]; } }
|