1. 程式人生 > >資料結構(六)樹

資料結構(六)樹

資料結構中的樹。是比較重要的一章,尤其是二叉樹,有辣麼多的性質。而且,習題難度較前幾章有顯著提高。這章要看深一點了

一、 填空

1、設高度為h的二叉樹上只有度為0和度為2的結點,該二叉樹的結點數可能達到的最大值是( 2^h - 1  ),最小值是( 2h - 1  )。

解釋:

當h為3時:

最大值情況
這裡寫圖片描述
最小值情況
這裡寫圖片描述
然後,用h=3,帶入推導公式

2、樹是結點的有限集合,它有( 有且僅有一個 )個根結點,其餘的結點分成m(m>=0)個(互不相交 )的集合,每個集合又都是樹。一個結點的子樹的個數稱為該結點的( )。

解釋:這個是基本概念,應注意根節點有且只有一個,就是最上面的那個!

3、從概念上講,樹和二叉樹是兩種不同的資料結構,將樹轉化為二叉樹的基本目的是( 樹可採用二叉樹的儲存結構並利用二叉樹的已有演算法解決樹的有關問題 )。

解釋:二叉樹有那麼多性質,演算法,不用虧了

4、一棵二叉樹的第i(i≥1)層最多有( 2^(i-1)  )個結點;一棵有n(n>0)個結點的滿二叉樹共有( (n+1)/2  )個葉子結點和( (n-1)/2  )個非終端結點。

解釋:滿二叉樹即二叉樹只有度為2的結點,葉子結點即為終端結點,非終端結點=總結點數-終端節點數

5、在有n個葉子的哈夫曼樹中,葉子結點總數為( n ),非終端結點的個數為( n - 1

)。

解釋:
這就是Huffman樹的樣子
這裡寫圖片描述

6、深度為k的二叉樹中,所含葉子的個數最多為( 2^(k-1) )。

解釋:所含葉子的個數最多即為滿二叉樹

7、已知一棵度為3的樹有2個度為1的結點,3個度為2的結點,4個度為3的結點。則該樹中有( 12)個葉子結點。

解釋:
結點數=度數+1
葉子結點的度為0
2+3+4+x=2*1+3*2+4*3+1得x=12

8、具有100個結點的完全二叉樹的葉子結點數為( 50 )。

解釋:
滿二叉樹是特殊的完全二叉樹
滿二叉樹的結點總數的計算公式:2^h - 1
滿二叉樹第n層結點總數為:2^(n-1)
由2^6=64<100<2^7=128得這個二叉樹的高度為7。


則100-64=36,得第7層葉子節點數為36。
滿二叉樹第7層結點總數為:2^6=64
(64-36)/2=14為第6層的葉子結點個數
葉子結點總數為36+14=50

9、某二叉樹前序遍歷結點訪問順序是ABCDEFG,中序遍歷結點訪問順序是CBDAFGE,其後序遍歷結點訪問順序是( CDBGFEA )。

解釋:
(1)前序遍歷:先雙親、再左孩子、最後右孩子;
(2)中序遍歷:先左孩子、再雙親、最後右孩子;
(3)後序遍歷:先左孩子、再右孩子、最後雙親;
這裡寫圖片描述
沒有畫線的僅幫助理解。(真心不好做呀

10、已知二叉樹中葉子數為50,僅有一個孩子的結點數為30,則總結點數為( )。

解釋:
二叉樹中葉子數為50(度為0的結點數為50),僅有一個孩子的結點數為30(度為1的結點數為30)
假設ni表示二叉樹中度為i的結點的數量,n0=50,n1=30.
根據二叉樹的性質有n0=n2+1(自己去畫圖去),則n2=n0-1=49.
n=n0+n1+n2=50+30+49=129.

11、在順序儲存的二叉樹中,編號為i和j的兩個結點處在同一層的條件是( log2 i= log2 j )。

解釋:
二叉樹的順序儲存結構,此結構是將二叉樹的所有結點,按照一定的次序,儲存到一片連續的儲存單元中。如圖:
這裡寫圖片描述
12、深度為6的二叉樹最多有( 63 )個結點。

解釋:深度為h的二叉樹最多有2^h-1個結點

13、對具有n個結點的二叉連結串列,共有( 2n )個指標,其中( n-1 )個指標用於指向其左右孩子,剩下的( n+1 )個指標則是空的。

解釋:
這裡寫圖片描述
如圖,答案總結下就能得出了

14、哈夫曼樹是帶權路徑長度( 最短 )的樹,通常具有較大權值的結點離根( 較近 )。

解釋:這個是Huffman樹的性質

15、任意一棵具有n個結點的二叉樹,若它有m個葉子,則該二叉樹上度為1的結點有( n-2m+1 )個。

解釋:
假設ni表示二叉樹中度為i的結點的數量,n0=m
根據公式(自己可以推導)n2=n0-1=m-1
總結點數n=n0+n2+n1,則n1=n-n0-n2=n-m-(m-1)=n-2m+1

二、 選擇題

1、如果結點A有3個兄弟,B是A的雙親,則B的度是( B )。

A:3    B:4    C:5    D:1

解釋:最基礎的,兄弟即它們有同一個雙親

2、設結點X有左孩子Y右孩子Z,用三種遍歷方法得到的遍歷序列中X(  C)是Y的前趨,X( C )是Z的後繼,Y( A )是Z的前趨。

A:一定    B:一定不    C:不一定

解釋:
前序遍歷:XYZ
中序遍歷:YXZ
後序遍歷:YZX

3、 二叉樹的先序序列和後序序列正好相反,則該二叉樹一定是( B )的二叉樹。

A:空或只有一個結點 B:高度等於其結點數
C:任一結點無左孩子 D:任一結點無右孩子

解釋:
來來,畫圖試驗下
這裡寫圖片描述
高度等於結點數,則這個樹的度為1
先序序列: ABCD
後序序列: DCBA

4、 一棵左右子樹均不空的二叉樹在先序線索化後,其空指標域數為( B )。

A:0 B:1 C:2 D :不確定

解釋:
這裡寫圖片描述
如圖,這個樹的先序遍歷為ABC,因為C沒有後繼,所以右指標為空

5、二叉樹線上索化後,仍不能求解的問題是( D )。
A:先序線索二叉樹中求先序後繼 B:中序線索二叉樹中求中序後繼
C:中序線索二叉樹中求中序前趨 D:後序線索二叉樹中求後序後繼

解釋:
這裡寫圖片描述

如圖,後序線索二叉樹中求後序後繼,後序遍歷DEBFGCA,若求C的後繼A,是不能求的,因為它有子樹。

6、線索化二叉樹中某結點R沒有左孩子的充要條件是( C  )。
A:R.Lchild=Null B:R.Ltag=0 C:R.Ltag=1 D:R.rchild=Null

7、深度為k的完全二叉樹至少有( B )個結點,至多有( C )個結點,具有n個結點的完全二叉樹,若按自上而下,從左至右依次給結點編號,則編號最小的葉子的序號是( A )。
這裡寫圖片描述

8、一個高度為h的滿二叉樹共有n個結點,其中有m個葉子結點,則有( D )成立。

A:n=h+m B:h+m=2n C:m=h-1 D:n=2m-1

9、將含有100個結點的完全二叉樹編號,編號為71的結點的雙親的編號為( B )。

A:31 B:35 C:63 D:無法確定

10、如果T’是由有序樹T轉換而來的二叉樹,那麼T中結點的前序序列就是T’中結點的( A )序列,T中結點的後序序列就是T’中結點的( B )序列。

A:前序 B:中序 C:後序 D層次序

11、有12個結點的平衡二叉樹的最大深度是( A )。

A:4 B:5 C:6 D:3

解釋:它的左右子樹的高度之差不能超過1

12、具有五層結點的二叉平衡樹至少有( B  )個結點。

A:10   B:12    C:15    D:17

13、下列說法正確的是( D )。

A:二叉樹中任何一個結點的度都為2。
B:二叉樹的度為2。
C:任何一棵二叉樹中至少有一個結點的度為2。
D:一棵二叉樹的度可以小於等於2。

解釋:..

14、任何一棵二叉樹的葉子結點在先序、中序、後序遍歷序列中的相對次序( A )。
A:肯定不發生改變 B:肯定發生改變 C:不能確定 D:有時發生變化

15、線索二叉樹是一種(  C  )結構。
A:邏輯  B:邏輯和儲存  C:物理   D:線性

16、一棵左子樹為空的二叉樹線上索化後,其中的空鏈域的個數為( C )。
A:0 B:1 C:2 D:不確定

17、在有n個結點的二叉連結串列中,值為空的鏈域的個數為( C )。
A:n-1 B:2n-1 C:n+1 D:2n+1

18、設二叉樹有n個結點,則其深度為( D )。
A:n-1 B:n C:[log2n]+1 D:不能確定

19、設森林中有4棵樹,第一、二、三、四棵樹的結點個數分別是N1,N2,N3,N4,那麼當把森林T轉換成一棵二叉樹後,其根結點的右子樹上有( D )個結點。根結點的左子樹上有( A )個結點。
A:N1-1 B:N1 C:N1+N2+N3 D:N2+N3+N4
這裡寫圖片描述
步驟1:先將各樹按照左孩子右兄弟的原則轉化成二叉樹
步驟2:然後將各二叉樹通過根的右指標相連(即:按森林圖形中樹的先後次序,依次將後邊一棵二叉樹的根作為前邊一棵二叉樹根結點的右子樹)

20、討論樹、森林和二叉樹的關係,目的是為了( B )。
A:藉助二叉樹上的運算方法去實現對樹的一些運算。
B:將樹、森林按二叉樹的儲存方式進行儲存並利用二叉樹的演算法解決樹的有關問題。
C:將樹、森林準換成二叉樹。
D:體現一種技巧,沒有什麼實際意義。

三、簡單應用
1、對給定的一組鍵值W=(5,2,9,11,8,3,7),試構造相應的哈夫曼樹,並計算它的帶權路徑長度。
1 2 3 4 5 6 7 8 9 10 11 12 13
這裡寫圖片描述

2、已知二叉樹的中序和後序遍歷序列分別如下,試構造出該二叉樹。
中序:CBEDAFIGH
後序:CEDBIFHGA
這裡寫圖片描述
3、下面左圖的樹轉化為二叉樹,右圖的二叉樹轉化為樹或森林。

這裡寫圖片描述
這裡寫圖片描述

4、假設一棵二叉樹的後序序列為DCEGBFHKJIA,中序序列為DCBGEAHFIJK,請寫出該二叉樹的先序遍歷序列。

先序序列:ABCDGEIHFJK

四、 演算法設計

1、以二叉連結串列為儲存結構,編寫演算法求結點x的雙親。

BiTree parent (BiTree T,BiTree p ,TElemType x){
 /*第一次呼叫前p為空值*/
 if(T)
 { 
 if(T->data)==x
 } 
 return (p) ;
else { 
  p=T;
  parent(Tlchild,p,x);
  parent(Trchild,p,x);
 } 
        }
}//parent

2、編寫演算法交換二叉樹中所有結點的左右子樹。
3、以孩子連結串列做儲存結構(見P137,圖6.14a),求結點x的第i個孩子的值。