【データ構造】—ツリー関連の演習

1. 空白を埋めることを選択します

質問1

1. 高さ h の二分木上に次数 0 と次数 2 のノードのみがあると仮定すると、二分木に含まれるノードの数は少なくとも () 個、最大で () 個になります。
A, h; 2 h -1
B, 2h-1; 2 h -1
C, 2h+1; 2 h-1 -1
D, h+1; 2 h -1

分析:(B)
少なくとも、1 つのノードを持つルート ノードを除いて、他の h-1 層には 2 つのノードがあるため、2(h-1)、つまり 2(h-1)+1= 2h- 1.
ほとんどの場合、次数 0 の最後の層を除いて、他のノードは次数 2 のノード、つまり 2 h -1 ノードです。

質問2

2. 124 個のリーフ ノードを持つ完全なバイナリ ツリーには、最大 ( ) 個のノードがあります。
A、247
B、248
C、249
D、250

分析: (B)
n 0 =n 2 +1 および N=n 0 +n 1 +n 2であるため、次数 0 と次数 1 のノードの差は 1 であるため、完全なノードには次数 1 のノードはn 1個だけ存在します。二分木0 または 1 のいずれかになります。つまり、要約点の数が偶数の場合はn 1 =1、奇数の場合はn 0 =0 になります。
この質問では、最大ノード数、つまり n 1 =1 を考慮しているため、n 0 =124、n 2 =123が得られます。したがって N=124+123+1=248 となります。

質問3

3. 二分木に 126 個のノードがある場合、第 7 層には最大で () 個のノードが存在します (ルート ノードは第 1 層にあります)。
A、32
B、64
C、63
D、レイヤー 7 はありません

分析:(C)
第 1 層から第 6 層までのノードが満杯である状況、つまり第 1 層から第 6 層までのノード数が 1+2+4+8+16+32=63 である状況を考えます。第 7 層には最大 64 個のノードを含めることができ、二分木には 126 個のノードがあるため、第 7 層には 126-63=63 個のノードが存在します。

質問4

4. n 個のノードを持つバイナリ ツリーは、2 次リンク リストを使用してノードを格納します。ここで、非 null ポインタの数は () で、null ポインタの数は () です。
A, n+1; n-1
B, n; n-1
C, n-1; n+1
D, 2n; 2n-1

分析: (A)
n 個のノードには n-1 個の分岐があり、各分岐はポインターに対応するため、非 null ポインターの数は n-1 になります。さらに、各ノードには 2 つのポインター フィールド (左ポインター フィールド lchild 、右ポインタ ドメイン rchild)、ポインタ ドメインの合計数から null 以外のポインタの数を引いたものが null ポインタの数、2n-(n-1)=n+1 になります。

質問5

5. 二分木の preorder シーケンス、inorder シーケンス、postorder シーケンスでは、すべての葉ノードの順序は () になります。
A. 同じではない
B. まったく同じ
C. プレシーケンスとミッドシーケンスは同じですが、ポストシーケンスとは異なります
D. ミッドシーケンスとポストシーケンスは同じですが、異なりますプリシーケンス

分析: (B)
3 つの走査方法では、左右のサブツリーを訪問する順序は同じですが、ルート ノードを訪問する順序が異なるため、すべてのリーフ ノードの順序は同じになります。

質問6

6. 手がかり二分木は () 構造です。
A、論理
B、論理およびストレージ
C、物理
D、リニア

分析:(C)
バイナリ ツリーは論理構造ですが、スレッド バイナリ ツリーは手がかりのあるリンク リスト構造であり、物理構造です。

質問7

7. n 個のリーフ ノードを持つハフマン ツリーでは、非リーフ ノードの総数は () です。ハフマン ツリーに 215 個のノードがある場合、ハフマン エンコードを実行すると、異なるコードワードを取得できます ()。
A、n-1; 108
B、n; 107
C、2n-1; 214
D、2n; 215

分析:(A)
ハフマン木には次数 0 と 2 のノードしかなく、n 0 =n 2 +1 より、葉以外のノードの総数は n-1 であることがわかります。
ノードの総数 N=n 0 +n 2、および n 0 =n 2 +1、N=215 は、n 0 =108と置き換えることができます

質問8

8. 次の条件でバイナリ ツリーを検索します。
A. 前次の走査シーケンスは後次の走査シーケンスと同じ ()
B. 中次の走査シーケンスは後次の走査シーケンスと同じです。トラバーサル シーケンスは、()
C です。前順序のトラバーサル シーケンスは、中間の順序と同じです。トラバーサル シーケンスは、()
D と同じです。順序内のトラバーサル シーケンスは、階層トラバーサル シーケンスと同じです。それは ()

分析:
A. ルート ノードのみを持つ空のツリーまたはバイナリ ツリー;
B. 空のツリーまたは任意のノードには最大でも左のサブツリーがあります;
C. 空のツリーまたは任意のノードには最大でも右のサブツリーがあります;
D. 空のツリーまたは任意のノード ノードにはせいぜい右側のサブツリーのみです。

質問9

9. (判定) ハフマン符号化木では、同じ頻度を持つ 2 つの文字が同じハフマン コードを持ちます。

分析:(×)
文字が同じでない限り、同じハフマン コードは存在しないため、結果のハフマン コードも同じになります。

2. 応募に関する質問

質問 10 (シーケンスの走査)

質問の種類:通过已知树的遍历序列,求其他遍历序列

10. 二分木の順走査シーケンスは ABCDEFG、事後走査シーケンスは BDCAFGE であり、その前位走査シーケンスを求めます。

解決策: 最初、中間、後次のトラバーサル シーケンスと、バイナリ ツリーの階層トラバーサル シーケンスのトラバース順序は次のとおりであることがわかります。

名前を反復処理する トラバースルール
プレオーダートラバーサルシーケンス ルート > 左 > 右
順序走査シーケンス 左 > ルート > 右
事後走査シーケンス 左 > 右 > ルート
階層横断シーケンス 左 > 右

まず、指定された 2 つのシーケンスを通じてバイナリ ツリーを復元します。ポストオーダー トラバーサル シーケンスは BDCAFGE であるため、シーケンスの最後の要素 "E" はバイナリ ツリーのルート ノードであるため、取得できます。左サブツリーと右
ここに画像の説明を挿入
サブツリー インオーダートラバーサルとポストオーダートラバーサルは分割されています。まず E の左サブツリーを見てください。事後シーケンスから、A が左サブツリーのルート ノードであることがわかります。事後シーケンスでは、A には左部分木がなく、右部分木は BCD であることがわかります。同様に、E の右部分木では、G は右部分木のルート ノードですが、F が BCD であるかどうかを判断することはできません。左のサブツリーまたは右のサブツリーであるため、中位の走査シーケンスでは、G の左側は F です。次のように、順序走査ルールによれば、F は G の左のサブツリーであり、G には右のサブツリーがありません。 : 上記と同様に、
ここに画像の説明を挿入
C がルート ノード A の右側のサブツリー、C の左側のサブツリーが B、右側のサブツリーが D であることがわかります。以下は完全な二分木です。したがって、その事前順序走査シーケンスは次のようになります
ここに画像の説明を挿入
。取得: EACBDGF。

質問11(保管構造)

質問の種類:根据树的存储结构,画出二叉树

11. 以下の図は二分木の逐次記憶構造です。空白はノードが存在しないことを示します。二分木を描き、二分木の順列と後順を求めます。

ここに画像の説明を挿入
解決策: 完全なバイナリ ツリーとして保存され、次のように空白が空になります:
ここに画像の説明を挿入
注: 黒のマークはバイナリ ツリーをより明確に示すためだけに使用されており、バイナリ ツリーの青い部分のみを残すことをお勧めします。
インオーダー シーケンス: BADCFE、ポストオーダー シーケンス: BDFECA。

質問 12 13 (二分木/ツリーとフォレスト間の変換)

質問の種類 1 :根据所给二叉树,将其转换为树

12. 次のバイナリ ツリーをツリーに変換します。

ここに画像の説明を挿入
解決策: 最初のステップは回転です。次のように、ルート ノードの左右のサブツリーを除くバイナリ ツリー内のすべてのノードを右に 45 度回転します。 2 番目のステップは、
ここに画像の説明を挿入
線を接続することです。ノードの左側の子に右側のサブツリーがある場合、右側のサブツリーはノードに接続され、ノード A の左側の子 B には右側のサブツリー D があるため、A は D に接続され、ノード C の左側の子 E は次のようになります。右側のサブツリーは H なので、次のように C を H に接続します。
ここに画像の説明を挿入
3 番目のステップは切断です。次のように、各ノードの右サブツリーの右枝と、ルート ノードを除く親ノードとの間の接続を削除します。 二分
ここに画像の説明を挿入
木から変換された木を取得できます。
ここに画像の説明を挿入
質問タイプ 2 :根据所给森林,将其转换为二叉树

13. 3 つのツリーで構成される次のフォレストがあるとすると、それをバイナリ ツリーに変換します。

ここに画像の説明を挿入
解決策: 最初のステップは接続です。次のように、最初にすべてのノードの兄弟ノードを接続し、各ツリーのルート ノードも接続します。
ここに画像の説明を挿入
2 番目のステップは切断です。すべてのノードの左端の子のみが保持され、他のノードは次のように切断されます。
ここに画像の説明を挿入
切断後:
ここに画像の説明を挿入
3 番目のステップは回転です。最初のツリーのルート ノードを軸として、次のように時計回りに 45 度回転します。
ここに画像の説明を挿入

質問 14 (スレッド化されたバイナリ ツリー)

質問の種類:根据所给二叉树,画出该二叉树的线索二叉树

14. 二分木の事前順序および順序内トラバーサル シーケンスをそれぞれ ABDFCEGH および BFDAGEHC とし、この二分木の事後手がかりツリーを見つけます。

解決策: まず、バイナリ ツリーを見つけます。次のことが得られます。
ここに画像の説明を挿入
最初のステップでは、描画される対応する手がかりバイナリ ツリーの最初/中位のトラバーサル シーケンスを見つけます。ポストオーダートラバーサルシーケンスはFDBGHECAであることがわかります。
2 番目のステップは、(バイナリ ツリー内の左右の子が欠落しているノードの) 手がかりを描画することです。ノードに左の子がない場合、手がかりは、対応する手がかりバイナリ ツリーの最初/中間/後次トラバーサル シーケンスの先行ノードを指し、先行ノードがない場合は NULL を指します。ノードに右がない場合は、NULL を指します。子、手がかりは、対応する手がかりバイナリ ツリーの最初/中間/後順トラバーサル シーケンスを指します。 内/後順トラバーサル シーケンスの後続者。後続者がない場合は NULL。
たとえば、ノード D には右の子がなく、後続トラバーサル シーケンスにおけるノード D の後続ノードは B であるため、B を指します。ノード F には左の子がなく、ノード F には後続トラバーサル シーケンスにおける先行ノードがありません。順序トラバーサル シーケンスなので、NULL を指します。ノード H には左の子と右の子がありません。ポストオーダー トラバーサル シーケンスでは、ノード H の前任者は G で、後者は E なので、それぞれ G と E を指します。以下に続きます:
ここに画像の説明を挿入

質問 15 16 (ハフマン木)

質問の種類 1 :已知字符的频数,设计哈夫曼编码,并画出相应的哈夫曼树

15. メッセージに出現する文字は a、b、e、l、m、n、o、u、y、g で、メッセージに出現する頻度はそれぞれ 43、15、11、7、9、6 です。 、45、25、5、3。
(1) 各文字のハフマン符号化を設計する;
(2) ハフマン ツリーを描画する。

解決策:
質問タイプ 2 :已知字符的概率,设计哈夫曼编码,并画出相应的哈夫曼树

通信システムに5種類の文字A、B、C、D、Eしか出現できない場合、その確率はそれぞれ0.12、0.15、0.19、0.21、0.33である。
(1) ハフマンツリーを描画する;
(2) ハフマンコードを設計する。

解決策: (1) 周波数を 100 倍に拡大し、それぞれ 12、15、19、21、33 に対応します。まず、ルート ノードの重みが最も小さい 2 つのツリーを左右のサブツリーとして選択し、その
ルート ノードの重みが新しい二分木 値はその重みの合計であり、新しいノードがそれに追加されます。
次の図に示すように、12+15=27、27 を加算します。
ここに画像の説明を挿入
マージを続ける:
ここに画像の説明を挿入
27 と 33 がマージされ、27+33=60:
ここに画像の説明を挿入
40+60=100、100 がマージされます。
ここに画像の説明を挿入
(2) ハフマン符号化を実行し、ルートから ノードからリーフ ノードまで、次のように、左の枝は 0、右の枝は 1 に
ここに画像の説明を挿入
なります。

B C D E
100 101 00 01 11

おすすめ

転載: blog.csdn.net/qq_43085848/article/details/130982176