File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed
solution/1000-1099/1028.Recover a Tree From Preorder Traversal Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments