Untitled
unknown
plain_text
2 months ago
1.5 kB
2
Indexable
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode balanceBST(TreeNode root) { // Step 1: Perform inorder traversal to get sorted values List<Integer> sortedValues = new ArrayList<>(); inorderTraversal(root, sortedValues); // Step 2: Build balanced BST from sorted values return buildBalancedBST(sortedValues, 0, sortedValues.size() - 1); } private void inorderTraversal(TreeNode node, List<Integer> values) { if (node == null) return; inorderTraversal(node.left, values); values.add(node.val); inorderTraversal(node.right, values); } private TreeNode buildBalancedBST(List<Integer> values, int start, int end) { if (start > end) return null; // Choose middle element as root int mid = start + (end - start) / 2; TreeNode root = new TreeNode(values.get(mid)); // Recursively build left and right subtrees root.left = buildBalancedBST(values, start, mid - 1); root.right = buildBalancedBST(values, mid + 1, end); return root; } }
Editor is loading...
Leave a Comment