Untitled

 avatar
unknown
plain_text
2 months ago
1.1 kB
2
Indexable
class LargestBSTSubtree {
    static class NodeInfo {
        boolean isBST;
        int size;
        int min;
        int max;
        NodeInfo(boolean isBST, int size, int min, int max) {
            this.isBST = isBST;
            this.size = size;
            this.min = min;
            this.max = max;
        }
    }
    public int largestBSTSubtree(TreeNode root) {
        return helper(root).size;
    }
    private NodeInfo helper(TreeNode node) {
        if (node == null) {
            return new NodeInfo(true, 0, Integer.MAX_VALUE, Integer.MIN_VALUE);
        }
        NodeInfo left = helper(node.left);
        NodeInfo right = helper(node.right);
        if (left.isBST && right.isBST && node.val > left.max && node.val < right.min) {
            int size = left.size + right.size + 1;
            int min = node.val;
            int max = right.max;
            return new NodeInfo(true, size, min, max);
        }
        return new NodeInfo(false, Math.max(left.size, right.size), 0, 0);
    }

 
}
Editor is loading...
Leave a Comment