leetcode 二叉樹的前中後遍歷的迭代方法

2021-10-12 10:20:55 字數 1050 閱讀 1990

題目就不用列了,遞迴法是很簡單的,但是迭代法還是有一定難度,在此記錄

前序(easy):

class

solution

return res;}}

;

中序(medium):

class

solution

root = s.

top();

res.

push_back

(root-

>val)

; s.

pop();

root = root-

>right;

}return res;}}

;

後序(hard):

方法一為什麼要定義乙個prev指標呢?這是因為當乙個結點的右子樹已經訪問過了,我們需要一種方法來標記告訴它,不然會再次進入右子樹而導致死迴圈!因此prev記錄的是上一步輸出的結點!

class

solution

root = s.

top();

root = root-

>right;

if(root ==

null

|| root == prev)

}return res;}}

;

可以發現,中序和後序的迴圈條件都是:

while

(!s.

empty()

||root!=

null

)

這是因為對於中序和後序,當右子樹為空(或以及被輸出)並且本身也被輸出的時候才結束!

後序的方法二:

我們知道前序是根左右,後序是左右根,所以我們可以使用前序的結果來得出後序

class

solution

while

(!s2.

empty()

)return res;}}

;

二叉樹的遍歷(前中後)

總體來說分為遞迴和非遞迴實現 前序遍歷 二叉樹前序遍歷dlr public static void preorder treenode rootnode 前序非遞迴實現,借助棧,先進後出 param public static void preordernonrecursive treenode r...

二叉樹的迭代遍歷(前,中,後)

目錄 1 迭代方式的前序遍歷 2 迭代方式的中序遍歷 3 迭代方式的後續遍歷 class solution stacks new stack while root null s.isempty root s.peek s.pop root root.right return res 思路 採用棧作為...

二叉樹的前中後層遍歷

package com.data.tree public class bitree package com.data.tree classname treetest description todo author payphone date 2018年12月24日 下午1 44 07 version...