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