1樓:李白韓信杜甫
程式寫多了,以下那些是多餘的,定義函式,你下面並沒有具體程式。
初始化乙個二叉樹,int creatree(btree t);
對二叉樹樹結點的操作函式:
int print(char e);
遍歷二叉樹結點:先序遍歷法。
int preoder(btree t,int(*vist)(char));
遍歷二叉樹結點:中序遍歷法。
int inorder(btree t,int(*vist)(char));
遍歷二叉樹結點:後序遍歷法。
int postorder(btree t,int(*vist)(char));
而且註釋部分是用 /*來實現的,要不然系統認為你的註釋也是程式的部分。
2樓:網友
/初始化乙個二叉樹,int creatree(btree t);
對二叉樹樹結點的操作函式:
int print(char e);
遍歷二叉樹結點:先序遍歷法。
int preoder(btree t,int(*vist)(char));
遍歷二叉樹結點:中序遍歷法。
int inorder(btree t,int(*vist)(char));
遍歷二叉樹結點:後序遍歷法。
int postorder(btree t,int(*vist)(char));
二叉樹遍歷結合例子具體講解例子不能太簡單
3樓:網友
遍歷的方法有:層序遍歷、先序遍歷、中序遍歷、後序遍歷等,以下面的二叉樹為例介紹遍歷。
e/ \b f
a d hc g i\k
j1.層序遍歷。
即從上到下按層次訪問該樹,每一層單獨輸出一行,每一層要求訪問的順序為從左到右。
例子中層序遍歷為ebfadhcgikj,一層一層從上往下,從左往右輸出。
2.先序遍歷。
遍歷順序是 先根再左子樹再右子樹,訪問根結點的操作發生在遍歷其左右子樹之前。
我們看例子,首先從根節點e開始,先根輸出e,然後左子樹b,此時的位置在b,b相當於ad兩個結點的根,所以遍歷b之後,遍歷b的左子樹a,a沒有孩子結點,所以遍歷b的右子樹d,d有左子樹遍歷c,這樣完成了e的左子樹遍歷,再遍歷e的右子樹f,再遍歷f的左子樹,這裡沒有,就遍歷f的右子樹h,然後再遍歷h的左右子樹,左子樹g,當然g沒有孩子結點,所以接下來是i,然後 k j類似。
所以先序遍歷是ebadcfhgikj,記住一點,訪問根結點的操作發生在遍歷其左右子樹之前,在上面的例子中,訪問完e之後訪問b,接下來不是訪問f,而是訪問b的左右子樹。
3.中序遍歷。
先左子樹再根再右子樹。
a/ \b c
中序遍歷就是 b a c,如果b有左右子樹,如下圖,再訪問b之前先訪問b的左子樹。
a/ \b c
d e中序遍歷為 d b e a c,如果c有右子樹沒有左子樹,如下圖則是先訪問c再訪問f
a/ \b c
d e f最上面提到的例子。
e/ \b f
a d hc g i\k
j中序就是:abcdefghijk,在訪問e的時候,發現e有左子樹b,先b,再訪問b的時候發現有左子樹a,所以肯定還是a先,所以這個序列是從a開始的。
3.後序遍歷。
其訪問順序是先左再右再根,下面的例子,後序就是bca
a/ \b c
如果b有左右子樹,如下圖,先訪問b的左右子樹,再訪問b,其後序是debca
a/ \b c
d e如果c有右子樹沒有左子樹有右子樹,再訪問c時的右子樹f再訪問c,其後序是debfca
a/ \b c
d e f最開始提到的例子。
e/ \b f
a d hc g i\k
j後序是acdbgjkihfe
先序線索二叉樹的遍歷,後序線索二叉樹怎麼畫啊
include include typedef enum pointertag 指標標誌 typedef char datatype typedef struct bithretreebithretree bithretree pre 全域性變數,用於二叉樹的線索化 bithretree creat...
資料結構二叉樹的遍歷,C語言資料結構 二叉樹的遍歷
前序 根,左兒子,右兒子 中序 左兒子,根,右兒子 後序 左兒子,右兒子,根 首先是要牢記一上幾句話 比如這棵樹的中許遍歷,a有左兒子,先不訪問a,以此類推,直到d沒有左兒子,訪問d,然後訪問d的根b,然後應該訪問b的右兒子,但是b沒有,所以訪問b的根a,訪問完a以後訪問a的右子樹。先看c,c有左兒...
某二叉樹的先序遍歷序列是abdgcefh,中序遍歷序列是dg
分析過程 以下面的例題為例進行講解 已知一棵二叉樹的先序遍歷序列和中序遍歷序列分別是abdgcefh dgbaechf,求二叉樹及後序遍歷序列。分析 先序遍歷序列的第乙個字元為根結點。對於中序遍歷,根結點在中序遍歷序列的中間,左邊部分是根結點的左子樹的中序遍歷序列,右邊部分是根結點的右子樹的中序遍歷...