資料結構課後習題及解析第六章

2021-03-04 09:23:01 字數 3701 閱讀 3380

第六章習題

1.試分別畫出具有3個結點的樹和3個結點的二叉樹的所有不同形態。

2.對題1所得各種形態的二叉樹,分別寫出前序、中序和後序遍歷的序列。

3.已知一棵度為k的樹中有n1個度為1的結點,n2個度為2的結點,……,nk個度為k的結點,則該樹中有多少個葉子結點並證明之。

4.假設一棵二叉樹的先序序列為ebadcfhgikj,中序序列為abcdefghijk,請畫出該二叉樹。

5.已知二叉樹有50個葉子結點,則該二叉樹的總結點數至少應有多少個?

6.給出滿足下列條件的所有二叉樹:

① 前序和後序相同

② 中序和後序相同

③ 前序和後序相同

7. n個結點的k叉樹,若用具有k個child域的等長鏈結點儲存樹的乙個結點,則空的child域有多少個?

8.畫出與下列已知序列對應的樹t:

樹的先根次序訪問序列為gfkdaiebchj;

樹的後根次序訪問序列為diaekfcjhbg。

9.假設用於通訊的電文僅由8個字母組成,字母在電文中出現的頻率分別為:

0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10

請為這8個字母設計哈夫曼編碼。

10.已知二叉樹採用二叉鍊錶存放,要求返回二叉樹t的後序序列中的第乙個結點指標,是否可不用遞迴且不用棧來完成?請簡述原因.

11. 畫出和下列樹對應的二叉樹:

12.已知二叉樹按照二叉鍊錶方式儲存,編寫演算法,計算二叉樹中葉子結點的數目。

13.編寫遞迴演算法:對於二叉樹中每乙個元素值為x的結點,刪去以它為根的子樹,並釋放相應的空間。

14.分別寫函式完成:在先序線索二叉樹t中,查詢給定結點*p在先序序列中的後繼。在後序線索二叉樹t中,查詢給定結點*p在後序序列中的前驅。

15.分別寫出演算法,實現在中序線索二叉樹中查詢給定結點*p在中序序列中的前驅與後繼。

16.編寫演算法,對一棵以孩子-兄弟鍊錶表示的樹統計其葉子的個數。

17.對以孩子-兄弟鍊錶表示的樹編寫計算樹的深度的演算法。

18.已知二叉樹按照二叉鍊錶方式儲存,利用棧的基本操作寫出後序遍歷非遞迴的演算法。

19.設二叉樹按二叉鍊錶存放,寫演算法判別一棵二叉樹是否是一棵正則二叉樹。正則二叉樹是指:在二叉樹中不存在子樹個數為1的結點。

20.計算二叉樹最大寬度的演算法。二叉樹的最大寬度是指:二叉樹所有層中結點個數的最大值。

21.已知二叉樹按照二叉鍊錶方式儲存,利用棧的基本操作寫出先序遍歷非遞迴形式的演算法。

22. 證明:給定一棵二叉樹的前序序列與中序序列,可唯一確定這棵二叉樹;

給定一棵二叉樹的後序序列與中序序列,可唯一確定這棵二叉樹;

23. 二叉樹按照二叉鍊錶方式儲存,編寫演算法,計算二叉樹中葉子結點的數目。

24. 二叉樹按照二叉鍊錶方式儲存,編寫演算法,將二叉樹左右子樹進行交換。

實習題1. [問題描述] 建立一棵用二叉鍊錶方式儲存的二叉樹,並對其進行遍歷(先序、中序和後序),列印輸出遍歷結果。

[基本要求] 從鍵盤接受輸入先序序列,以二叉鍊錶作為儲存結構,建立二叉樹(以先序來建立)並對其進行遍歷(先序、中序、後序),然後將遍歷結果列印輸出。要求採用遞迴和非遞迴兩種方法實現。

[測試資料] abcффdeфgффfффф(其中ф表示空格字元)

輸出結果為: 先序:abcdegf

中序:cbegdfa

後序:cgbfdba

2.已知二叉樹按照二叉鍊錶方式儲存,編寫演算法,要求實現二叉樹的豎向顯示(豎向顯示就是二叉樹的按層顯示)。

3.如題1要求建立好二叉樹,按凹入錶形式列印二叉樹結構,如下圖所示。

2. 按凹入錶形式列印樹形結構,如下圖所示。

第六章答案

6. 1分別畫出具有3個結點的樹和3個結點的二叉樹的所有不同形態。

【解答】

具有3個結點的樹具有3個結點的二叉樹

6.3已知一棵度為k的樹中有n1個度為1的結點,n2個度為2的結點,……,nk個度為k的結點,則該樹中有多少個葉子結點?

【解答】設樹中結點總數為n,則n=n0 + n1 + …… + nk

樹中分支數目為b,則b=n1 + 2n2 + 3n3 + …… + knk

因為除根結點外,每個結點均對應乙個進入它的分支,所以有n= b + 1

即n0 + n1 + …… + nk = n1 + 2n2 + 3n3 + …… + knk + 1

由上式可得葉子結點數為:n0 = n2 + 2n3 + …… + (k-1)nk + 1

6.5已知二叉樹有50個葉子結點,則該二叉樹的總結點數至少應有多少個?

【解答】n0表示葉子結點數,n2表示度為2的結點數,則n0 = n2+1

所以n2= n0 –1=49,當二叉樹中沒有度為1的結點時,總結點數n=n0+n2=99

6.6 試分別找出滿足以下條件的所有二叉樹:

(1) 前序序列與中序序列相同;

(2) 中序序列與後序序列相同;

(3) 前序序列與後序序列相同。

【解答】

(1) 前序與中序相同:空樹或缺左子樹的單支樹;

(2) 中序與後序相同:空樹或缺右子樹的單支樹;

(3) 前序與後序相同:空樹或只有根結點的二叉樹。

6.9 假設通訊的電文僅由8個字母組成,字母在電文中出現的頻率分別為:

0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10

請為這8個字母設計哈夫曼編碼。

【解答】

構造哈夫曼樹如下:

哈夫曼編碼為:

i1:11111 i5:1100

i2:11110 i6: 10

i3:1110 i7: 01

i4:1101 i8: 00

6.11畫出如下圖所示樹對應的二叉樹。

【解答】

6.15分別寫出演算法,實現在中序線索二叉樹t中查詢給定結點*p在中序序列中的前驅與後繼。在先序線索二叉樹t中,查詢給定結點*p在先序序列中的後繼。

在後序線索二叉樹t中,查詢給定結點*p在後序序列中的前驅。

(1)找結點的中序前驅結點

bitnode *inpre (bitnode *p)

/*在中序線索二叉樹中查詢p的中序前驅結點,並用pre指標返回結果*/

return (pre);

}(2)找結點的中序後繼結點

bitnode *insucc (bitnode *p)

/*在中序線索二叉樹中查詢p的中序後繼結點,並用succ指標返回結果*/

return (succ);

}(3) 找結點的先序後繼結點

bitnode *presucc (bitnode *p)

/*在先序線索二叉樹中查詢p的先序後繼結點,並用succ指標返回結果*/

(4) 找結點的後序前驅結點

bitnode *succpre (bitnode *p)

/*在後序線索二叉樹中查詢p的後序前驅結點,並用pre指標返回結果*/

6.21已知二叉樹按照二叉鍊錶方式儲存,利用棧的基本操作寫出先序遍歷非遞迴形式的演算法。

【解答】

void preorder(bitree root) /*先序遍歷二叉樹的非遞迴演算法*/

else}}

6.24已知二叉樹按照二叉鍊錶方式儲存,編寫演算法,將二叉樹左右子樹進行交換。

【解答】

演算法(一)

void exchange ( bitree root )

} 演算法(二)

void exchange ( bitree root )

{ p=root;

資料結構課後習題第六章

一 選擇題 1.設高度為h的二叉樹只有為0和2的結點,則此類二叉樹的結點數至少有 個,至多有幾個 a.2h b.2h 1 c.2h 1 d.2h 1 e.2h 1 f.2h 1 2.高度為h的完全二叉樹有 個結點,至多有 個結點。a.2h b.2h 1 c.2h 1 d.2h 1 3.具有n個結點的...

資料結構習題答案耿國華主編第六章

6.27 問題 假設一棵二叉樹的先序序列為ebadcfhgikj和中序序列為abcdefghijk。請畫出該樹。解答 6.29 問題 假設一棵二叉樹的層序序列為abcdefghij和中序序列為dbgehjacif。請畫出該樹。6.37 問題 試利用棧的基本操作寫出先序遍歷二叉樹的非遞迴演算法。解答提...

資料結構試題和答案第六章

a a 2n b n l c n l d n 11.由3 個結點可以構造出多少種不同的二叉樹?a a 2 b 3 c 4 d 5 12.深度為k的完全二叉樹至少有 個結點,至多有 個結點。13.具有n個結點的二叉樹,採用二叉鍊錶儲存,共有 個空鏈域。14.n個結點的線索二叉樹上含有的線索數為 15....