Untitled
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 = Math.min(node.val, left.min); int max = Math.max(node.val, right.max); return new NodeInfo(true, size, min, max); } return new NodeInfo(false, Math.max(left.size, right.size), 0, 0); } }
Leave a Comment