Untitled
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