|
14 | 14 | * }
|
15 | 15 | */
|
16 | 16 | class Solution {
|
17 |
| - public TreeNode balanceBST(TreeNode root) { |
18 |
| - List<Integer> sortedList = new ArrayList<>(); |
19 |
| - inorderTraversal(root, sortedList); |
20 |
| - return buildBST(sortedList, 0, sortedList.size() - 1); |
21 |
| - } |
22 |
| - |
23 |
| - private TreeNode buildBST(List<Integer> sortedList, int start, int end) { |
24 |
| - if (start > end) { |
25 |
| - return null; |
| 17 | + public TreeNode balanceBST(TreeNode root) { |
| 18 | + List<Integer> inorder = getInorderNodes(root); |
| 19 | + return createBST(inorder, 0, inorder.size() - 1); |
26 | 20 | }
|
27 |
| - int mid = (start + end) / 2; |
28 |
| - TreeNode root = new TreeNode(sortedList.get(mid)); |
29 |
| - root.left = buildBST(sortedList, start, mid - 1); |
30 |
| - root.right = buildBST(sortedList, mid + 1, end); |
31 |
| - return root; |
32 |
| - } |
33 |
| - |
34 |
| - private void inorderTraversal(TreeNode root, List<Integer> sortedList) { |
35 |
| - if (root == null) { |
36 |
| - return; |
| 21 | + |
| 22 | + private List<Integer> getInorderNodes(TreeNode root) { |
| 23 | + Stack<TreeNode> stack = new Stack<>(); |
| 24 | + while (root != null) { |
| 25 | + stack.push(root); |
| 26 | + root = root.left; |
| 27 | + } |
| 28 | + List<Integer> list = new ArrayList<>(); |
| 29 | + while (!stack.isEmpty()) { |
| 30 | + TreeNode node = stack.pop(); |
| 31 | + list.add(node.val); |
| 32 | + TreeNode rightNode = node.right; |
| 33 | + while (rightNode != null) { |
| 34 | + stack.push(rightNode); |
| 35 | + rightNode = rightNode.left; |
| 36 | + } |
| 37 | + } |
| 38 | + return list; |
| 39 | + } |
| 40 | + |
| 41 | + private TreeNode createBST(List<Integer> list, int start, int end) { |
| 42 | + if (start > end) { |
| 43 | + return null; |
| 44 | + } |
| 45 | + int mid = (start + end) / 2; |
| 46 | + TreeNode leftTree = createBST(list, start, mid - 1); |
| 47 | + TreeNode rightTree = createBST(list, mid + 1, end); |
| 48 | + return new TreeNode(list.get(mid), leftTree, rightTree); |
37 | 49 | }
|
38 |
| - inorderTraversal(root.left, sortedList); |
39 |
| - sortedList.add(root.val); |
40 |
| - inorderTraversal(root.right, sortedList); |
41 |
| - } |
42 | 50 | }
|
0 commit comments