2
public TreeNode balanceBST(TreeNode root) {3
List<Integer> arr = new ArrayList();5
return sortedArrayToBST(arr, 0, arr.size() - 1);8
public void InOrder(TreeNode node, List<Integer> arr) {10
InOrder(node.left, arr);12
InOrder(node.right, arr);16
public TreeNode sortedArrayToBST(List<Integer> arr, int start, int end) {22
int mid = (start + end) / 2;24
TreeNode node = new TreeNode(arr.get(mid));25
node.left = sortedArrayToBST(arr, start, mid - 1);26
node.right = sortedArrayToBST(arr, mid + 1, end);