Skip to content

Commit f5c1264

Browse files
authored
solution in java lang doocs#1028
1 parent c3fa0cf commit f5c1264

File tree

1 file changed

+52
-0
lines changed
  • solution/1000-1099/1028.Recover a Tree From Preorder Traversal

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
14+
* }
15+
*/
16+
class Solution {
17+
public TreeNode recoverFromPreorder(String traversal) {
18+
Stack<TreeNode> stack = new Stack<>();
19+
int i = 0;
20+
21+
while (i < traversal.length()) {
22+
int depth = 0;
23+
while (i < traversal.length() && traversal.charAt(i) == '-') {
24+
depth++;
25+
i++;
26+
}
27+
28+
int num = 0;
29+
while (i < traversal.length() && Character.isDigit(traversal.charAt(i))) {
30+
num = num * 10 + (traversal.charAt(i) - '0');
31+
i++;
32+
}
33+
34+
// Create the new node
35+
TreeNode newNode = new TreeNode(num);
36+
37+
while (stack.size() > depth) {
38+
stack.pop();
39+
}
40+
if (!stack.isEmpty()) {
41+
if (stack.peek().left == null) {
42+
stack.peek().left = newNode;
43+
} else {
44+
stack.peek().right = newNode;
45+
}
46+
}
47+
48+
stack.push(newNode);
49+
}
50+
return stack.isEmpty() ? null : stack.get(0);
51+
}
52+
}

0 commit comments

Comments
 (0)