@@ -225,7 +225,7 @@ public:
225225## 其他语言版本
226226
227227### Java:
228- 迭代法前序遍历代码如下 :
228+ 迭代法前序遍历(空指针标记法)代码如下 :
229229
230230``` java
231231class Solution {
@@ -254,7 +254,42 @@ class Solution {
254254}
255255```
256256
257- 迭代法中序遍历代码如下:
257+ 迭代法前序遍历(boolean标记法)代码如下:
258+
259+ ``` java
260+ class Solution {
261+ public List<Integer > preorderTraversal (TreeNode root ) {
262+ List<Integer > res = new LinkedList<> ();
263+ if (root == null ) {
264+ return res;
265+ }
266+ Stack<Object []> stack = new Stack<> ();
267+ stack. push(new Object []{root, false });
268+
269+ while (! stack. empty()) {
270+ TreeNode node = (TreeNode ) stack. peek()[0 ];
271+ Boolean visited = (Boolean ) stack. peek()[1 ];
272+ stack. pop();
273+
274+ if (visited) {
275+ res. add(node. val);
276+ } else { // 先序遍历:中左右,入栈顺序相反
277+ if (node. right != null ) {
278+ stack. push(new Object []{node. right, false });
279+ }
280+ if (node. left != null ) {
281+ stack. push(new Object []{node. left, false });
282+ }
283+ stack. push(new Object []{node, true });
284+ }
285+ }
286+ return res;
287+ }
288+ }
289+ ```
290+
291+ 迭代法中序遍历(空指针标记法)代码如下:
292+
258293``` java
259294class Solution {
260295public List<Integer > inorderTraversal (TreeNode root ) {
@@ -281,7 +316,41 @@ public List<Integer> inorderTraversal(TreeNode root) {
281316}
282317```
283318
284- 迭代法后序遍历代码如下:
319+ 迭代法中序遍历(boolean标记法)代码如下:
320+
321+ ``` java
322+ class Solution {
323+ public List<Integer > inorderTraversal (TreeNode root ) {
324+ List<Integer > res = new LinkedList<> ();
325+ if (root == null ) {
326+ return res;
327+ }
328+ Stack<Object []> stack = new Stack<> ();
329+ stack. push(new Object []{root, false });
330+ while (! stack. empty()) {
331+ TreeNode node = (TreeNode ) stack. peek()[0 ];
332+ Boolean visited = (Boolean ) stack. peek()[1 ];
333+ stack. pop();
334+
335+ if (visited) {
336+ res. add(node. val);
337+ } else { // 中序遍历:左中右,入栈顺序相反
338+ if (node. right != null ) {
339+ stack. push(new Object []{node. right, false });
340+ }
341+ stack. push(new Object []{node, true });
342+ if (node. left != null ) {
343+ stack. push(new Object []{node. left, false });
344+ }
345+ }
346+ }
347+ return res;
348+ }
349+ }
350+ ```
351+
352+ 迭代法后序遍历(空指针标记法)代码如下:
353+
285354``` java
286355class Solution {
287356 public List<Integer > postorderTraversal (TreeNode root ) {
@@ -309,6 +378,40 @@ class Solution {
309378}
310379```
311380
381+ 迭代法后序遍历(boolean标记法)代码如下:
382+
383+ ``` java
384+ class Solution {
385+ public List<Integer > postorderTraversal (TreeNode root ) {
386+ List<Integer > res = new LinkedList<> ();
387+ if (root == null ) {
388+ return res;
389+ }
390+ Stack<Object []> stack = new Stack<> ();
391+ stack. push(new Object []{root, false });
392+
393+ while (! stack. empty()) {
394+ TreeNode node = (TreeNode ) stack. peek()[0 ];
395+ Boolean visited = (Boolean ) stack. peek()[1 ];
396+ stack. pop();
397+
398+ if (visited) {
399+ res. add(node. val);
400+ } else { // 后序遍历:左右中,入栈顺序相反
401+ stack. push(new Object []{node, true });
402+ if (node. right != null ) {
403+ stack. push(new Object []{node. right, false });
404+ }
405+ if (node. left != null ) {
406+ stack. push(new Object []{node. left, false });
407+ }
408+ }
409+ }
410+ return res;
411+ }
412+ }
413+ ```
414+
312415### Python:
313416
314417> 迭代法前序遍历(空指针标记法):
0 commit comments