File tree 3 files changed +166
-0
lines changed
solution/1000-1099/1028.Recover a Tree From Preorder Traversal
3 files changed +166
-0
lines changed Original file line number Diff line number Diff line change 74
74
75
75
<!-- tabs:start -->
76
76
77
+ #### Java
78
+
79
+ ``` java
80
+ /**
81
+ * Definition for a binary tree node.
82
+ * public class TreeNode {
83
+ * int val;
84
+ * TreeNode left;
85
+ * TreeNode right;
86
+ * TreeNode() {}
87
+ * TreeNode(int val) { this.val = val; }
88
+ * TreeNode(int val, TreeNode left, TreeNode right) {
89
+ * this.val = val;
90
+ * this.left = left;
91
+ * this.right = right;
92
+ * }
93
+ * }
94
+ */
95
+ class Solution {
96
+ public TreeNode recoverFromPreorder (String traversal ) {
97
+ Stack<TreeNode > stack = new Stack<> ();
98
+ int i = 0 ;
99
+
100
+ while (i < traversal. length()) {
101
+ int depth = 0 ;
102
+ while (i < traversal. length() && traversal. charAt(i) == ' -' ) {
103
+ depth++ ;
104
+ i++ ;
105
+ }
106
+
107
+ int num = 0 ;
108
+ while (i < traversal. length() && Character . isDigit(traversal. charAt(i))) {
109
+ num = num * 10 + (traversal. charAt(i) - ' 0' );
110
+ i++ ;
111
+ }
112
+
113
+ // Create the new node
114
+ TreeNode newNode = new TreeNode (num);
115
+
116
+ while (stack. size() > depth) {
117
+ stack. pop();
118
+ }
119
+ if (! stack. isEmpty()) {
120
+ if (stack. peek(). left == null ) {
121
+ stack. peek(). left = newNode;
122
+ } else {
123
+ stack. peek(). right = newNode;
124
+ }
125
+ }
126
+
127
+ stack. push(newNode);
128
+ }
129
+ return stack. isEmpty() ? null : stack. get(0 );
130
+ }
131
+ }
132
+ ```
133
+
77
134
#### C++
78
135
79
136
``` cpp
Original file line number Diff line number Diff line change 69
69
70
70
<!-- tabs:start -->
71
71
72
+ #### Java
73
+
74
+ ``` java
75
+ /**
76
+ * Definition for a binary tree node.
77
+ * public class TreeNode {
78
+ * int val;
79
+ * TreeNode left;
80
+ * TreeNode right;
81
+ * TreeNode() {}
82
+ * TreeNode(int val) { this.val = val; }
83
+ * TreeNode(int val, TreeNode left, TreeNode right) {
84
+ * this.val = val;
85
+ * this.left = left;
86
+ * this.right = right;
87
+ * }
88
+ * }
89
+ */
90
+ class Solution {
91
+ public TreeNode recoverFromPreorder (String traversal ) {
92
+ Stack<TreeNode > stack = new Stack<> ();
93
+ int i = 0 ;
94
+
95
+ while (i < traversal. length()) {
96
+ int depth = 0 ;
97
+ while (i < traversal. length() && traversal. charAt(i) == ' -' ) {
98
+ depth++ ;
99
+ i++ ;
100
+ }
101
+
102
+ int num = 0 ;
103
+ while (i < traversal. length() && Character . isDigit(traversal. charAt(i))) {
104
+ num = num * 10 + (traversal. charAt(i) - ' 0' );
105
+ i++ ;
106
+ }
107
+
108
+ // Create the new node
109
+ TreeNode newNode = new TreeNode (num);
110
+
111
+ while (stack. size() > depth) {
112
+ stack. pop();
113
+ }
114
+ if (! stack. isEmpty()) {
115
+ if (stack. peek(). left == null ) {
116
+ stack. peek(). left = newNode;
117
+ } else {
118
+ stack. peek(). right = newNode;
119
+ }
120
+ }
121
+
122
+ stack. push(newNode);
123
+ }
124
+ return stack. isEmpty() ? null : stack. get(0 );
125
+ }
126
+ }
127
+ ```
128
+
72
129
#### C++
73
130
74
131
``` cpp
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