2.先序遍歷。非遞迴先序遍歷的思路如下:
1.先將根節點入棧
2.訪問根節點
3.如果根節點存在右孩子,則將右孩子入棧
4.如果根節點存在左孩子,則將左孩子入棧(注意:一定是右孩子先入棧,然後左孩子入棧)
5.重複2-4
3.中序遍歷。 非遞迴中序遍歷的思路如下://先序遍歷非遞迴
public
void
preorder2()
if(p.left != null)
}}
1.先將根節點入棧
2.將當前節點的所有左孩子入棧,直到左孩子為空
3.訪問棧頂元素,如果棧頂元素存在右孩子,則繼續第2步
4.重複第2、3步,直到棧為空並且所有的節點都被訪問
4.後序遍歷。 後續遍歷的非遞迴實現思路://中序遍歷非遞迴
public
void
infixorder2()
//訪問棧頂
p = stack.
pop();
//輸出
system.out.
println
(p);
if(p.right != null)
else
}}
1.根節點入棧
2.將根節點的左子樹入棧,直到最左,沒有左孩子為止
3.得到棧頂元素的值,先不訪問,判斷棧頂元素是否存在右孩子,如果存在並且沒有被訪問,則將右孩子入棧,否則,就訪問棧頂元素
//後序遍歷非遞迴
public
void
postorder2()
//訪問棧頂元素但不出棧
p = stack.
peek()
;if(p.right == null || p.right == pre)
else
}}
非遞迴方法遍歷二叉樹
思路 前序遍歷由圖示是先一里路向左全遞迴壓棧並且邊壓棧邊列印,直到左指標為空,然後得到棧頂指標,並出棧,找該棧頂結點的右結點,如果不為空,同樣的一路左遞迴壓棧,邊壓棧邊列印,直到左指標為空,然後重複,最後棧為空停止。借用棧實現回到前乙個結點 非遞迴遍歷 void btreeprevordernonr...
二叉樹遍歷(遞迴 非遞迴)
二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...
二叉樹非遞迴遍歷
二叉樹非遞迴遍歷的幾個要點 1 不管前序 中序還是後序,它們的遍歷路線 或者說是回溯路線,先沿左邊一直走到盡頭,然後回溯到某節點,並跳轉到該節點的右孩子 如果有的話 然後又沿著這個有孩子的左邊一直走到盡頭 都是一樣的。2 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...