二叉樹 資料結構

2021-09-22 21:33:33 字數 2748 閱讀 3131

二叉樹(binary tree(即二進位制樹形網路)):是n(n>=0)個結點的有限集合,該集或者為空集(空二叉樹),或者由乙個根結點和兩顆互不相交的、分別成為根結點的左子樹 和右子樹的二叉樹組成。

1.每個二叉樹最多有兩棵子樹,所以二叉樹不存在度大於2的結點。(注意:不是都需要兩棵子樹, 而是最多可以是兩顆子樹,沒有子樹或有有一顆子樹也都是可以的。)

2.左子樹和右子樹是有順序的,次序不能顛倒。

3.即使樹中某結點只有一顆子樹,也要區分它是在左子樹還是右子樹,下面是完全不同的二叉樹:

* 空二叉樹

* 只有乙個根結點

* 根結點只有左子樹

* 根結點只有右子樹

* 根結點既有左子樹又有右子樹

對於二叉樹來說,由於要區分左右,所以就演變成五種形態:

一、斜樹:顧名思義就是一定要斜的,但斜也要斜得有范,例如(上圖,2和3)

二、滿二叉樹:在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,並且所有葉子都在同一層上,這樣的二叉樹稱為滿二叉樹,例如:

滿二叉樹特點:*

1. 葉子只能出現在最下一層

2. 非葉子結點的度一定是2

3. 在同樣深度的二叉樹中,滿二叉樹的結點個數一定最多,同時葉子也是最多

三、完全二叉樹:對一顆具有n個結點的二叉樹按層序編號,如果編號為i(1<=i<=n)的結點與同樣深度的滿二叉樹中編號為i的結點位置完全相同,則這顆二叉樹稱為完全二叉樹。

完全二叉樹的特點:

1. 葉子結點只能出現在最下兩層

2. 最下層的葉子一定集中在左部連續位置

3. 倒數第二層,若有葉子結點,一定都在右部連續位置

4. 如果結點度為1,則該結點只有左孩子

5. 同樣結點數的二叉樹,完全二叉樹的深度最小

注意:滿二叉樹一定是完全二叉樹,但完全二叉樹不一定是滿二叉樹1.在二叉樹的第i層上至多有2^(i-1)個結點(i>=1)

2.深度為k的二叉樹至多有2^k-1個結點(k>=1)

3.對於任何一棵二叉樹t,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1

—首先我們假設度為1的結點數為n1,則二叉樹t的結點總數n=n0+n1+n2

—其次我們發現連線數總是等於結點數n-1,並且等於n1+2n2 —所以n-1=n1+2n2

—所以n0+n1+n2-1=n1+n2+n2 —最後n0=n2+1

4.具有n個結點的完全二叉樹的深度為[log2 n]+1

—由滿二叉樹的定義結合性質2我們可以知道:深度為k的滿二叉樹的結點數n一定是2^k-1

—對於滿二叉樹可以通過n=2^k-1倒退得到滿二叉樹的深度為k=log2 (n+1)

—對於倒數第二層的滿二叉樹我們也可以推出它的結點數為n=2^(k-1)-1

—所以完全二叉樹的結點數的取值範圍是:2(k-1)-1k-1

—由於n是整數,n<=2k-1可以看成n<2k

—同理2(k-1)-1(k-1)<=n

—所以2(k-1)<=n<2k

—不等式兩邊同時取對數,得到k-1<=log2 n5.如果對一棵有n個結點的完全二叉樹(其深度為[log2 n]+1)的結點按層序編號,對任一結點i(1<=i<=n)有以下性質:

—如果i=1,則結點i是二叉樹的根,無雙親

—如果2i>n,則結點無左孩子(結點i為葉子結點);否則其左孩子是結點2i

—如果2i+1>n,則結點i無右孩子;否則其右孩子是結點2i+1

(1)二叉樹的順序儲存結構二叉樹的順序儲存結構中節點的存放次序是:對該樹中每個節點進行編號,其編號從小到大的順序就是節點存放在連續儲存單元的先後次序。

若把二叉樹儲存到一維陣列中,則該編號就是下標值加1(注意c/c++語言中陣列的起始下標為0)。

樹中各節點的編號與等高度的完全二叉樹中對應位置上節點的編號相同。

定義為:typedef elemtype sqbtree[maxsize];

順序二叉樹,如下圖:

字串:sqbtree bt="#abd#c#e######f";`

(2)二叉樹的鏈式儲存結構

在二叉樹的鏈結儲存中,節點的結構如下:

typedef struct node

btnode;

其中,data表示值域,用於儲存對應的資料元素,lchild和rchild分別表示左指標域和右指標域,用於分別儲存左孩子節點和右孩子節點(即左、右子樹的根節點)的儲存位置。

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

《資料結構》 二叉樹

二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...

資料結構 二叉樹

1.二叉樹 二叉樹是一種特殊結構的樹,每個節點中最多有兩個子節點,如圖1所示 圖1 二叉樹 在圖1中的二叉樹裡,a c有兩個子節點,b d有乙個子節點。對於二叉樹還有圖2中的以下情況 圖2 二叉樹的特殊情況 在博文中還介紹了滿二叉樹和完全二叉樹還有其他的特殊二叉樹。2.二叉樹的實現 有兩種實現方式,...