Javascriptのバイナリツリー
バイナリツリーは、データストレージの目的で使用される特別なデータ構造です。二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。バイナリツリーには、検索が並べ替えられた配列と同じくらい高速であり、挿入または削除操作がリンクリストと同じくらい高速であるため、順序付き配列とリンクリストの両方の利点があります。
これは、以下で説明するいくつかの用語を含む二分木の図です-
重要な用語
以下は、ツリーに関する重要な用語です。
-
パス −パスとは、ツリーのエッジに沿ったノードのシーケンスを指します。
-
ルート −ツリーの最上部にあるノードはルートと呼ばれます。ツリーごとに1つのルートと、ルートノードから任意のノードへのパスが1つだけあります。
-
親 −ルートノードを除くすべてのノードには、親と呼ばれるノードに対して1つのエッジがあります。
-
子供 −エッジが下向きに接続されている特定のノードの下のノードは、子ノードと呼ばれます。
-
葉 −子ノードを持たないノードはリーフノードと呼ばれます。
-
サブツリー −サブツリーはノードの子孫を表します。
-
訪問 −訪問とは、制御がノード上にあるときにノードの値をチェックすることを指します。
-
トラバース −トラバースとは、特定の順序でノードを通過することを意味します。
-
レベル −ノードのレベルは、ノードの生成を表します。ルートノードがレベル0の場合、次の子ノードはレベル1にあり、孫はレベル2にあり、以下同様に続きます。
-
キー −キーは、ノードに対して検索操作が実行される基準となるノードの値を表します。
-
C++のバイナリツリーカメラ
二分木があるとしましょう。ツリーのノードにカメラを配置します。これで、ノードの各カメラは、その親、それ自体、およびその子を監視できます。ツリーのすべてのノードを監視するために必要なカメラの最小数を見つける必要があります。 したがって、入力が-のような場合 すべてを追跡するには1台のカメラで十分なので、出力は1になります。 これを解決するには、次の手順に従います- タイプTreeNodeのcoveredと呼ばれる1つのセットを定義します(ツリーノードには左、右、およびデータフィールドがあります) 関数solve()を定義します。これはノード、親、を取ります ノードが
-
Pythonでの二分木プレオーダートラバーサル
二分木があるとします。そのツリーのプレオーダートラバーサルを返す必要があります。したがって、ツリーが次のような場合- その場合、プレオーダートラバーサルは次のようになります:[3,9,20,15,7] これを解決するには、次の手順に従います- resとstという空のリストを作成します。 node:=root ノードまたはstが空でない場合 ノードがnullでない場合、 ノードのvalをresに挿入し、ノードをstに挿入し、ノードを設定します:=ノードの左側 temp:=stの最後の要素、およびstの最後の要素を削除 臨時雇用者の権利が利用できる場合は、 node:=t