File tree Expand file tree Collapse file tree 3 files changed +166
-0
lines changed
solution/1000-1099/1028.Recover a Tree From Preorder Traversal Expand file tree Collapse file tree 3 files changed +166
-0
lines changed Original file line number Diff line number Diff line change 7474
7575<!-- tabs:start -->
7676
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+
77134#### C++
78135
79136``` cpp
Original file line number Diff line number Diff line change 6969
7070<!-- tabs:start -->
7171
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+
72129#### C++
73130
74131``` 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