資料結構例程 二叉樹遍歷的非遞迴演算法

2021-07-05 23:56:09 字數 763 閱讀 5883

本文是資料結構基礎系列(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 第一步 建立乙個二維指標,用來儲存每乙個...