Untitled

 avatar
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