二叉樹(1) 定義,性質及結構

2021-05-27 01:59:08 字數 1552 閱讀 8607

一 

二叉樹定義:

滿足以下三個條件

1,根節點

2,去跟,分成兩個不相交的集合tl和tr

3,tl和tr也為二叉樹(遞迴定義)

二基本形態:

由三個節點構成的二叉樹的個數

三性質:

1,第i層有2^(i-1)個節點

2,深度為k的二叉樹,做多為 2^(k)-1個節點

k層二叉樹有2^(k)-1個節點,叫蠻二叉樹

3,度為0的節點的個數為n0

度為1的節點的個數為n1

度為2的節點的個數為n2

則n0=n2+1

推導過程:

設節點總數為n,分支數為b

則:n=n0+n1+n2

b=n1+2n2

b=n-1

4,假如一棵包含 n 個結點的二叉樹中每個結點都可以和滿二叉樹中編號為1至 n 的結點

一、一對應,則稱這類二叉樹為完全二叉樹

n個節點的完全二叉樹,深度為[log2 n]+1

5,完全二叉樹中,編號為i的節點,左孩子編號為2i,有孩子為2i+1,雙親編號為floor(i/2)

四儲存結構

1,順序 先補成完全二叉樹

const maxsize = 100;  // 暫定二叉樹中結點數的最大值為100

typedef struct sqbitree;       // 二叉樹的順序儲存結構

2,鏈式

二叉鍊錶:
左孩子域和右孩子域

typedef struct bitnode  *bitree;

三叉鍊錶:

typedef struct tritnode  *tritree;

雙親鍊錶

const maxsize = 100;        // 暫定二叉樹中結點數的最大值為100

typedef struct bptnode bptnode

typedef struct bptree bptree

cin>>bt.nodenum;            // 輸入結點數目

bt.root=0;

cin>> bt.nodes[0].data;         // 輸入根

bt.nodes[0].parent = -1;        // 根的雙親為空

bt.nodes[0].lrtag = 'l';

for (i=1; i> bt.nodes[i].data >> f >>bt.nodes[i].lrtag;

k=i-1;

while (k>=0 && bt.nodes[k].data != f) k--; // 查詢雙親

if (k<0) return false;        // 沒有找到雙親

bt.nodes[i].parent = k;

return true;}}

二叉樹的定義,性質及儲存

二叉樹是乙個有窮的結點集合 這個集合可以為空 若不為空,則它是由根結點和稱為其左子樹tl和右子樹tr的兩個不相交的二叉樹組成 二叉樹有五種基本形態 空結點,只有乙個根結點,只有根結點和左子樹,只有根結點和右子樹,有根結點和左子樹及右子樹 注 二叉樹的子樹有左右順序之分 1.斜二叉樹 skewed b...

二叉樹的定義 性質

一 二叉樹的定義 二叉樹是一種特殊的樹結構,也是常用的樹結構。二叉樹的儲存和處理比一般的樹簡單,同時一般的樹都能通過 簡單的轉換得到與之對應的二叉樹,這樣就可以採用二叉樹的儲存結構和有關演算法來解決樹的有關問題。二叉樹與樹一樣具有遞迴性質,它與樹的區別主要有以下兩點 1 二叉樹的每個結點至多只有兩棵...

二叉樹性質

1.在二叉樹的第i層上最多有2i 1 個節點 i 1 用歸納法證明 歸納基 i 1 層時,只有乙個根結點,2i 1 20 1 歸納假設 假設i k時,命題成立 歸納證明 二叉樹上每個結點至多有兩棵子樹,則 第 k 1 層的結點數 最多為2k 1 x 2 2k 1 1 2.二叉樹中如果深度為k,那麼最...