Largest BST Subtree
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private int[] nullNodeArray = {Integer.MAX_VALUE, Integer.MIN_VALUE, 0};
// [0] - min value
// [1] - max value
// [2] - BST count
public int largestBSTSubtree(TreeNode root) {
return dfsBSTSubtree(root)[2];
}
private int[] dfsBSTSubtree(TreeNode root) {
if (root == null) {
return nullNodeArray;
}
int[] left = dfsBSTSubtree(root.left);
int[] right = dfsBSTSubtree(root.right);
if (root.val > left[1] && root.val < right[0]) {
return new int[]{Math.min(root.val, left[0]), Math.max(root.val, right[1]), left[2] + right[2] + 1};
}
return new int[]{Integer.MIN_VALUE, Integer.MAX_VALUE, Math.max(left[2], right[2])};
}
}
最后更新于
这有帮助吗?