C語言二叉樹

2022-08-23 19:51:14 字數 1357 閱讀 9419

二叉樹使用鏈做結構,其結構體有儲存資料的變數和指向左右孩子的指標

1 typedef char

elemtype;

23 typedef struct

bitreenodebitreenode, *bitree;

二叉樹的一般遍歷方法(假設先左子樹再右子樹)有3個,根節點作為訪問的先後條件。

1

//後序遍歷

2void

postord(bitree bitree)

10return;11

12}1314

//中序遍歷

15void

inord(bitree bitree)

23return;24

25}2627

//前序遍歷

28void

preord(bitree bitree)

36return

;37 }

結合先序和中序遍歷序列建立二叉樹:

設先序遍歷序列和中序遍歷序列分別為"abcdefg"、"cbdaegf",分別對應1式和2式。從2式開頭找乙個字元與1式的第乙個字元相同的字元a,把2式中a左右兩邊分為左子樹和右子樹,根據2式的左右子樹再把1式分為左右子樹,即兩式的左右子樹內容要相同。1式分為1.1(左bcd)和1.2(右efg)兩式,2式分為2.1(左cbd)和2.2(右egf)兩式。這個時候把a作為根節點存入二叉樹中(必須是根節點才能存入)。遞迴進入下一步,比較1.1和2.1式:此時b為根節點,b左右兩邊c、d分別就是左右子樹了。再比較1.2和2.2式:2.2式中e在最左邊,e是根節點但沒有左子樹(如果2.2式中e在最右邊則e沒有右子樹)。再遞迴比較"fg"和"gf",同上,二叉樹建立完畢。

1

//把先序和中序遍歷排好序的陣列傳入陣列,i、j和m、n分別為對應陣列的0下標和尾下標

2 bitree init_bitree(char preord,char inord,int i,int j,int m,int

n)31

32 bitree createbitree(char preord,char inord,int

i)

試執行:

C語言 樹和二叉樹

非線性結構,至多有乙個直接前驅,但可能有多個直接後繼 樹的定義具有遞迴性,樹中還有樹 樹可以為空,即節點個數為0 上圖中樹的節點數 13 樹的度 3 樹的深度 4 每個節點最多有兩棵子樹 不存在度大於2的節點 左子樹和右子樹次序不能顛倒 有序樹 在二叉樹第i層至多由2 i 1 個結點 i 0 深度為...

C語言列印二叉樹

c語言列印二叉樹 在廣度遍歷的時候,有非常繁雜的計算符號的方法,要看懂可能得花時間。1 整個設計的難點在sprintf函式運用。sprintf buf,s 5,裡面的 s表示填充 個符號,個數和符號分別在字串後面表示。sprintf buf,s 5,裡面的 s表示擷取 個符號,個數和符號分別在字串後...

C語言搜尋二叉樹

今天和大家分享乙個二叉搜尋樹的實現演算法,二叉搜尋樹是若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值,如下圖 為了能讓這個樹更加完整,不那麼散亂,我將他包裝起來成為一棵樹,然後想,一棵樹裡要寫啥,那肯定是要乙個根節點啦,於是...