C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で指定された順序および事前順序トラバーサルからツリーを構築します


二分木のインオーダートラバーサルとプレオーダートラバーサルが与えられます。目標は、与えられたトラバーサルからツリーを構築することです。

順序のないトラバーサル −このタイプのツリートラバーサルでは、最初に左側のサブツリーにアクセスし、最後にノードと右側のサブツリーにアクセスします。

順序(ツリールート)

  • ルートが指すノードの左サブツリーをトラバースし、順番に呼び出します(ルート→左)

  • ルートにアクセス

  • ルートが指すノードの右サブツリーをトラバースし、順番に呼び出します(ルート→右)

プレオーダートラバーサル −このタイプのツリートラバーサルでは、ノードが最初にアクセスし、最後に左側のサブツリーと右側のサブツリーが続きます。

事前注文(ツリールート)

  • ルートにアクセス
  • ルートが指すノードの左側のサブツリーをトラバースし、順番に呼び出します(ルート→左)
  • ルートが指すノードの右サブツリーをトラバースし、順番に呼び出します(ルート→右)

以下のツリーのインオーダーおよびプレオーダートラバーサルが与えられます-

C++で指定された順序および事前順序トラバーサルからツリーを構築します

順序

2-3-4-5-6-8-10

事前注文

4-3-2-5-8-6-10

次に、指定されたプレオーダーおよびインオーダートラバーサルに対して上記のツリーを再度構築します。

順序

2-3-4-5-6-8-10

事前注文

5-3-2-4-8-6-10
  • preorderが最初にルートノードにアクセスすることがわかっているので、最初の値は常にツリーのルートを表します。上記のシーケンス5から、ツリーのルートになります。

事前注文

5 -3-2-4-8-6-10
  • 上記の順序付けられたトラバーサルから、ノードの左側のサブツリーがトラバースされてから、右側のサブツリーが続くことがわかります。したがって、順番に5の左側にあるすべての値は左側のサブツリーに属し、右側にあるすべての値は右側のサブツリーに属します。

順序

2-3-4 ← 5 → 6-8-10

C++で指定された順序および事前順序トラバーサルからツリーを構築します

  • 左側のサブツリーについても、上記と同じようにします。

左サブツリーのプレオーダートラバーサルは3-2-4です。したがって、3がルートになります。

インオーダートラバーサルはさらに2←3→4に分割されます

C++で指定された順序および事前順序トラバーサルからツリーを構築します

  • 正しいサブツリーについては、上記と同じようにします。

右側のサブツリーのプレオーダートラバーサルは8-6-10です。したがって、8がルートになります。

順序トラバーサルはさらに6←8→10に分割されます

C++で指定された順序および事前順序トラバーサルからツリーを構築します

したがって、このようにして、指定されたプレオーダーおよびインオーダートラバーサルから元のツリーを構築しました。


  1. Pythonでインオーダートラバーサルとポストオーダートラバーサルからバイナリツリーを構築する

    二分木のインオーダーおよびポストオーダートラバーサルシーケンスがあるとします。これらのシーケンスからツリーを生成する必要があります。したがって、事後順序と順序順のシーケンスが[9,15,7,20,3]と[9,3,15,20,7]の場合、ツリーは-になります。 手順を見てみましょう- メソッドがビルドツリーと呼ばれ、プレオーダーリストとインオーダーリストがあるとします root:=ポストオーダーから最後のノード、ポストオーダーから最初のノードを削除 root_index:=インオーダーリストからのroot.valのインデックス leftまたはroot:=buildTree(roo

  2. Pythonでプレオーダーおよびインオーダートラバーサルからバイナリツリーを構築する

    二分木のインオーダーおよびプレオーダートラバーサルシーケンスがあるとします。これらのシーケンスからツリーを生成する必要があります。したがって、プレオーダーシーケンスとインオーダーシーケンスが[3,9,20,15,7]と[9,3,15,20,7]の場合、ツリーは-になります。 手順を見てみましょう- メソッドがビルドツリーと呼ばれ、プレオーダーリストとインオーダーリストがあるとします root:=プレオーダーから最初のノードを削除し、プレオーダーから最初のノードを削除します root_index:=インオーダーリストからのroot.valのインデックス leftまたはroot:=