Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit acfa4c1

Browse files
authored
Update Balance a Binary Search Tree.java
1 parent 35ee9b0 commit acfa4c1

File tree

1 file changed

+31
-23
lines changed

1 file changed

+31
-23
lines changed

Medium/Balance a Binary Search Tree.java

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,37 @@
1414
* }
1515
*/
1616
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);
2620
}
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);
3749
}
38-
inorderTraversal(root.left, sortedList);
39-
sortedList.add(root.val);
40-
inorderTraversal(root.right, sortedList);
41-
}
4250
}

0 commit comments

Comments
 (0)