File tree Expand file tree Collapse file tree 2 files changed +80
-0
lines changed Expand file tree Collapse file tree 2 files changed +80
-0
lines changed Original file line number Diff line number Diff line change @@ -184,4 +184,44 @@ public List<Integer> inorderTraversal(TreeNode root) {
184
184
}
185
185
return resList ;
186
186
}
187
+ }
188
+
189
+
190
+ /*
191
+ * 迭代思路:
192
+ * 1、定义数据结构:列表存放节点值;栈按序存放节点;哈希表标记节点是否已处理过左右节点
193
+ * 2、数据结构初始化:根节点入栈
194
+ * 3、迭代逻辑:
195
+ * 1)栈不为空时遍历栈,弹出栈顶节点
196
+ * 2)判断当前节点是否已经处理过左右节点,处理过节点值存入列表
197
+ * 3)没有则将节点按右中左顺序入栈,弹出时才会是左中右,标记当前节点已处理
198
+ * 4、标记目的:节点已经遍历过,但又暂时不能存入列表,所以需要先按序暂存在栈中,按序弹出再存入列表
199
+ * 作用与递归相同,递归是使用栈帧保存当前变量,当下一层处理完成后,就可以回到当前栈帧的状态,处理当前的数据
200
+ * */
201
+ class Solution {
202
+ public List <Integer > inorderTraversal (TreeNode root ) {
203
+ List <Integer > resList = new ArrayList <>();
204
+ if (root == null ) {
205
+ return resList ;
206
+ }
207
+ Map <TreeNode , Boolean > flagMap = new HashMap <>();
208
+ Stack <TreeNode > stack = new Stack <>();
209
+ stack .add (root );
210
+ while (!stack .isEmpty ()) {
211
+ root = stack .pop ();
212
+ if (flagMap .getOrDefault (root , false )) {
213
+ resList .add (root .val );
214
+ } else {
215
+ if (root .right != null ) {
216
+ stack .push (root .right );
217
+ }
218
+ stack .push (root );
219
+ if (root .left != null ) {
220
+ stack .push (root .left );
221
+ }
222
+ flagMap .put (root , true );
223
+ }
224
+ }
225
+ return resList ;
226
+ }
187
227
}
Original file line number Diff line number Diff line change @@ -127,4 +127,44 @@ public List<Integer> postorderTraversal(TreeNode root) {
127
127
}
128
128
return resList ;
129
129
}
130
+ }
131
+
132
+
133
+ /*
134
+ * 迭代思路:
135
+ * 1、定义数据结构:列表存放节点值;栈按序存放节点;哈希表标记节点是否已处理过左右节点
136
+ * 2、数据结构初始化:根节点入栈
137
+ * 3、迭代逻辑:
138
+ * 1)栈不为空时遍历栈,弹出栈顶节点
139
+ * 2)判断当前节点是否已经处理过左右节点,处理过则节点值存入列表
140
+ * 3)没有则将节点按中右左顺序入栈,弹出时才会是左右中,标记当前节点已处理
141
+ * 4、标记目的:节点已经遍历过,但又暂时不能存入列表,所以需要先按序暂存在栈中,按序弹出再存入列表
142
+ * 作用与递归相同,递归是使用栈帧保存当前变量,当下一层处理完成后,就可以回到当前栈帧的状态,处理当前的数据
143
+ * */
144
+ class Solution {
145
+ public List <Integer > postorderTraversal (TreeNode root ) {
146
+ List <Integer > resList = new ArrayList <>();
147
+ if (root == null ) {
148
+ return resList ;
149
+ }
150
+ Map <TreeNode , Boolean > flagMap = new HashMap <>();
151
+ Stack <TreeNode > stack = new Stack <>();
152
+ stack .add (root );
153
+ while (!stack .isEmpty ()) {
154
+ root = stack .pop ();
155
+ if (flagMap .getOrDefault (root , false )) {
156
+ resList .add (root .val );
157
+ } else {
158
+ stack .push (root );
159
+ if (root .right != null ) {
160
+ stack .push (root .right );
161
+ }
162
+ if (root .left != null ) {
163
+ stack .push (root .left );
164
+ }
165
+ flagMap .put (root , true );
166
+ }
167
+ }
168
+ return resList ;
169
+ }
130
170
}
You can’t perform that action at this time.
0 commit comments