本文是資料結構基礎系列(6):樹和二叉樹中第11課時二叉樹遍歷非遞迴演算法的例程。
【二叉樹遍歷的非遞迴演算法】
實現二叉樹的先序、中序、後序遍歷的非遞迴演算法,並對用」a(b(d,e(h(j,k(l,m(,n))))),c(f,g(,i)))」建立的二叉樹進行測試。
請利用二叉樹演算法庫。
[參考解答](btreee.h見演算法庫)
#include
#include "btree.h"
void preorder1(btnode *b)
if (p->lchild!=null) //左孩子入棧
}printf("\n");
}}void inorder1(btnode *b)
if (top>-1)
}printf("\n");
}}void postorder1(btnode *b)
p=null; //p指向當前節點的前乙個已訪問的節點
flag=1;
while (top!=-1 && flag)
else}}
while (top!=-1);
printf("\n");
}}int main()
注:在main函式中,建立的用於測試的二叉樹如下——
資料結構 二叉樹的遞迴 非遞迴遍歷
複習一下二叉樹遞迴非遞迴的先中後序遍歷 寫非遞迴後序遍歷的時候卡殼了,參考了一下網上的思路,大概有兩種,一種是標記每個節點是否有走過,如果父節點的左右子節點都標記訪問過,則可以訪問父節點 一種是定義乙個指標,指向上乙個訪問的節點,如果某父節點的右子節點為null或者是上乙個訪問的節點,則該父節點應當...
資料結構例程 二叉樹遍歷的遞迴演算法
本文是資料結構基礎系列 6 樹和二叉樹中第10課時二叉樹的遍歷的例程。二叉樹遍歷的遞迴演算法 實現二叉樹的先序 中序 後序遍歷的遞迴演算法,並對用 a b d,e h j,k l,m n c f,g i 建立的二叉樹進行測試。請利用二叉樹演算法庫。參考解答 btreee.h見演算法庫 include...
資料結構 二叉樹的非遞迴遍歷
之前的文章,我們詳細的講述了二叉樹的建立 遍歷等的實現,但是都是以遞迴的方式。其實我們知道遞迴的過程是乙個不斷開闢棧幀的過程,會影響演算法的執行效率,那麼這篇文章主要是站在c語言的角度為大家分析一下二叉樹的非遞迴前序 中序 後序遍歷 1 二叉樹的前序遍歷 1 第一步 建立乙個二維指標,用來儲存每乙個...