二叉樹遍歷非遞迴

2021-10-24 19:36:09 字數 849 閱讀 4293

前序遍歷

先結點再左右子樹

使用棧的方式

輸出結點(中) 壓入棧中

左子樹右子樹

遇到非空結點不停的壓棧 若遇到空結點 指標指向棧頂元素的右結點 則棧頂元素彈出 繼續

利用了棧先進後出的特點 每一次遇到空結點 我們首先要向上找它的父結點就是棧頂

//前序遍歷非遞迴 

void preodern(btlink t)

else

}}

//中序遍歷非遞迴

void inodern(btlink t)

else

}}

後序遍歷採用棧的方式

左右中-》中右左

和上面兩種非遞迴類似

//後序遍歷

void postoder(btlink t)

else

} while(

!st2.empty(

))}

層序遍歷佇列方式

//層序遍歷

void leveloder(btlink t)

qu.push(t);;

while(

!qu.empty(

)) if(qu.front(

)->right!=null)

qu.pop();

}}

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

二叉樹非遞迴遍歷

二叉樹非遞迴遍歷的幾個要點 1 不管前序 中序還是後序,它們的遍歷路線 或者說是回溯路線,先沿左邊一直走到盡頭,然後回溯到某節點,並跳轉到該節點的右孩子 如果有的話 然後又沿著這個有孩子的左邊一直走到盡頭 都是一樣的。2 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...

非遞迴遍歷二叉樹

中序遞迴遍歷 void inordertrvdigui node pnode 然而,當樹的深度很大 比如16 時 假設為滿二叉樹 樹的節點數為 2 0 2 1 2 2 2 15 2 16 65536,遍歷整個二叉樹意味著有65536次函式呼叫,這將極大地增加程式執行時間。這時,應該採取非遞迴便利二叉...