二叉樹的儲存結構和實現

2021-06-19 06:39:02 字數 1906 閱讀 6457

一、二叉樹儲存結構分為順序儲存和鏈式儲存

二、二叉樹性質

1:二叉樹第i層上的節點數目最大是2的i-1次方(i>=1)

2:深度為k的二叉樹節點數目最多為2的k次方再減1

3:在任意乙個二叉樹中,葉子節點(度為0的節點)=度為2的節點+1

4:二叉樹的節點的度可以為0,也可以為1,可以為2;二叉樹有兩個特例:即滿二叉樹和完全二叉樹;滿二叉樹每一層節點都是最大的,並且沒有度為1的節點;

5:具有n個節點的完全二叉樹的深度是lg n    +1

三、二叉樹的順序儲存結構

二叉樹的順序儲存採用陣列來表示,

用編號的方法從樹根起,自上層至下層,每層自左至右地給所有結點編號。

缺點:深度為k的右單支樹為k個節點,但是如果用順序儲存的話,就需要2的k次方再減1個節點空間。

優點:所以一般滿二叉樹和完全二叉樹可以使用並且能夠利用順序儲存的優點;既能夠利用儲存空間,又可以利用陣列的下表值來確定樹的節點位置以及節點直接的關係;

c++**實現:

二叉樹的順序儲存表示:

#define max_tree_size 100//二叉樹最大節點數

typedef telemtype sqbittree[max_tree_size];

struct position

順序儲存的基本操作(23個)

1:構造空二叉樹

2:銷毀二叉樹

3:構造順序二叉樹

4:二叉樹判空

5:求二叉樹深度

6:二叉樹根

7:返回二叉樹某個節點的值

8:給二叉樹某個節點賦新值

9:返回節點雙親

10:返回節點左孩子

11:返回節點右孩子

12:返回節點左兄弟

13:返回節點右兄弟

14:把從q的j節點開始的子樹移為從t的i節點開始的子樹

15:先序遍歷

16:中序遍歷

17:後序遍歷 

四、二叉樹的鏈式儲存表示

二叉樹的鏈式儲存結構是指,用鍊錶來表示一棵二叉樹,即用鏈來指示元素的邏輯關係。通常的方法是鍊錶中每個結點由三個域組成,資料域和左右指標域,左右指標分別用來給出該結點左孩子和右孩子所在的鏈結點的儲存位址。

二叉鍊錶表示:

typedef struct bitnode

bitnode ,*bitree;

基本操作(22個)

1:構造空的二叉樹

2:銷毀二叉樹

3:建立二叉樹

4:二叉樹判空

5:求二叉樹深度

6:求二叉樹根

7:返回某個節點的值

8:返回節點雙親

9:返回二叉樹中某個節點值得指標

10:返回左孩子

11:返回右孩子

12:返回左兄弟

13:返回右兄弟

14:插入子樹

15:刪除子樹

16:先序遍歷

17:中序遍歷

18:後序遍歷

三叉鍊錶表示:

//三叉鍊錶表示

typedef struct bittnode

bittnode,*bittree;

基本操作:

1:構造空的二叉樹

2:銷毀二叉樹

3:建立二叉樹

4:二叉樹判空

5:求二叉樹深度

6:求二叉樹根

7:返回某個節點的值

8:返回節點雙親

9:返回二叉樹中某個節點值得指標

10:返回左孩子

11:返回右孩子

12:返回左兄弟

13:返回右兄弟

14:插入子樹

15:刪除子樹

16:先序遍歷

17:中序遍歷

18:後序遍歷

二叉樹的儲存結構及實現

二叉樹的順序儲存結構就是用一維陣列儲存二叉樹中的結點,並且結點的儲存位置 下標 應能體現結點之間的邏輯關係 父子關係。完全二叉樹和滿二叉樹中結點的序號可以唯一地反映出結點之間的邏輯關係 前序遍歷 void preorder int root,char data return 中序遍歷 void in...

二叉樹的儲存結構

二叉樹是非線性結構,即每個資料結點至多只有乙個前驅,但可以有多個後繼。它可採用順序儲存結構和鏈式儲存結構。1 順序儲存結構 二叉樹的順序儲存,就是用一組連續的儲存單元存放二叉樹中的結點。因此,必須把二叉樹的所有結點安排成為乙個恰當的序列,結點在這個序列中的相互位置能反映出結點之間的邏輯關係,用編號的...

二叉樹的儲存結構

二叉樹是非線性結構,即每個資料結點至多只有乙個前驅,但可以有多個後繼。它可採用順序儲存結構和鏈式儲存結構。1 順序儲存結構 二叉樹的順序儲存,就是用一組連續的儲存單元存放二叉樹中的結點。因此,必須把二叉樹的所有結點安排成為乙個恰當的序列,結點在這個序列中的相互位置能反映出結點之間的邏輯關係,用編號的...