C# バイナリ ツリー トラバーサル アルゴリズムの実装の簡単な分析

C# バイナリ ツリー トラバーサル アルゴリズムの実装の簡単な分析

C# アルゴリズムは、バイナリ ツリーの定義、既知のバイナリ ツリーの構築方法、および C# でバイナリ ツリーをトラバースするためのいくつかの従来のアルゴリズム (事前順序、イン オーダー、事後順序、階層) の使用を実装します。困っている方々のお役に立てれば幸いですし、皆様のご指導も頂ければ幸いです。 C# のデータ構造に関する書籍は書店で見つかりますが、インターネット上にはほとんどありません。優れた学習リソースをお持ちの場合は、ぜひ教えてください。前もって感謝します。データ構造は、今日のプログラマーにとって非常に重要です。データ構造の習得が得意な人は、論理的思考が強く、プログラムを設計する際にそれほど苦労することはありません。多層アプリケーションを設計する場合、人々は本当に頭を悩ませます。若いうちに脳を鍛えておきましょう。ハハハ、早速本題に入りましょう。

このプログラムでは、図 (バイナリ ツリー図) に示すように、既知のバイナリ ツリーが使用されます。

ここでは、いくつかのアルゴリズムとアイデアについて簡単に紹介します。

◆C# バイナリ ツリー トラバーサル アルゴリズムの事前順序トラバーサル:

1. ルートノードにアクセスする

2. 左のサブツリーを前順に走査します。

3. 右側のサブツリーを前順にトラバースします。

4. 例えば、既知の二分木を走査した結果は、A-﹥B-﹥D-﹥G-﹥H-﹥C-﹥E-﹥F となります。

◆C# バイナリ ツリー トラバーサル アルゴリズムの順序付きトラバーサル:

1. 左のサブツリーを順番に走査します。

2. ルートノードにアクセスします。

3. 右のサブツリーを順番に走査します。

4. たとえば、既知の二分木を走査した結果: B-﹥G-﹥D-﹥H-﹥A-﹥E-﹥C-﹥F

◆C# バイナリツリー走査アルゴリズム 後順走査:

1. 左のサブツリーを後順に走査します。

2. 右のサブツリーを後順にトラバースします。

3. ルートノードにアクセスします。

4. 例えば、既知の二分木を走査した結果: G-﹥H-﹥D-﹥B-﹥E-﹥F-﹥C-﹥A

◆C# バイナリ ツリー トラバーサル アルゴリズム レベル トラバーサル:

1. バイナリ ツリーの各ノードを上から下、左から右にトラバースします (実装には補助コンテナーが必要です)。

2. 例えば、既知の二分木を走査した結果: A-﹥B-﹥C-﹥D-﹥E-﹥F-﹥G-﹥H

バイナリ トラバーサル アルゴリズム ソリューション全体のコードは次のとおりです。

  1. システムの使用;
  2. System.Collections.Genericを使用します
  3. System.Textを使用します
  4.  
  5. 名前空間構造
  6. {
  7.     クラスプログラム
  8. {
  9. #region バイナリツリーノードデータ構造の定義 
  10.          // バイナリ ツリー ノード データ構造には、データ ドメイン、左ノードと右ノード、および親ノード メンバーが含まれます。  
  11.       クラスノード﹤T﹥
  12. {
  13. Tデータ;
  14. ノード﹤T﹥ Lnode、Rnode、Pnode;
  15.             公開Tデータ
  16. {
  17.                  {データ = 値; }を設定します
  18.                 取得{データを返す; }
  19.  
  20. }
  21.             パブリックノード﹤T﹥ LNode
  22. {
  23.                 設定{ Lnode = 値; }
  24.                 取得{戻り値 Lnode; }
  25. }
  26.             パブリックノード﹤T﹥ RNode
  27. {
  28.                 設定{ Rnode = 値; }
  29.                 取得{戻り値 Rnode; }
  30.  
  31. }
  32.  
  33.             パブリックノード﹤T﹥ PNode
  34. {
  35.                 設定{ Pnode = 値; }
  36.                 取得{ Pnodeを返す; }
  37.  
  38. }
  39.           パブリックノード()
  40. { }
  41.           パブリックノード(Tデータ)
  42. {
  43.                this .data = データ;
  44. }
  45.  
  46. }
  47. #終了領域
  48.  
  49. #region 事前順序バイナリツリー 
  50.         静的  void PreOrder﹤T﹥(ノード﹤T﹥ rootNode)
  51. {
  52.             ルートノードがnull場合
  53. {
  54. コンソールに行を書き込みます。
  55. PreOrder﹤T﹥(rootNode.LNode);
  56. PreOrder﹤T﹥(rootNode.RNode);
  57.  
  58. }
  59. }
  60.         
  61. #終了領域
  62.  
  63. #region 既知の二分木を構築する 
  64.  
  65.         静的ノード﹤文字列﹥ BinTree()
  66. {
  67. ノード﹤文字列﹥[] binTree =新しいノード﹤文字列﹥[8];
  68.              //ノードを作成する 
  69. binTree[0] =新しいノード﹤ string ﹥( "A" );
  70. binTree[1] =新しいノード﹤ string ﹥( "B" );
  71. binTree[2] =新しいノード﹤ string ﹥( "C" );
  72. binTree[3] =新しいノード﹤ string ﹥( "D" );
  73. binTree[4] =新しいノード﹤ string ﹥( "E" );
  74. binTree[5] =新しいノード﹤ string ﹥( "F" );
  75. binTree[6] =新しいノード﹤ string ﹥( "G" );
  76. binTree[7] =新しいノード﹤ string ﹥( "H" );
  77.              // バイナリツリーの階層的トラバーサルの考え方を使用して、既知のバイナリツリーを構築します 
  78.  
  79. binTree[0].LNode = binTree[1];
  80. binTree[0].RNode = binTree[2];
  81. binTree[1].RNode = binTree[3];
  82. binTree[2].LNode = binTree[4];
  83. binTree[2].RNode = binTree[5];
  84. binTree[3].LNode = binTree[6];
  85. binTree[3].RNode = binTree[7];
  86.              //バイナリツリーのルートノードを返す 
  87.              binTree[0]を返します
  88.  
  89. }
  90. #終了領域
  91.  
  92. #region バイナリツリーの順序走査 
  93.         静的  void MidOrder﹤T﹥(ノード﹤T﹥ ルートノード)
  94. {
  95.             ルートノードがnull場合
  96. {
  97. MidOrder﹤T﹥(ルートノード.LNode);
  98. コンソールに行を書き込みます。
  99. MidOrder﹤T﹥(ルートノード.RNode);
  100. }
  101. }
  102. #終了領域 
  103. 二分木のポストオーダー走査#region 二分木のポストオーダー走査
  104.         静的  void AfterOrder﹤T﹥(ノード﹤T﹥ ルートノード)
  105. {
  106.             ルートノードがnull場合
  107. {
  108. AfterOrder﹤T﹥(rootNode.LNode);
  109. AfterOrder﹤T﹥(rootNode.RNode);
  110. コンソールに行を書き込みます。
  111. }
  112.  
  113. }
  114. #終了領域
  115.  
  116. #領域レベルのトラバーサルバイナリツリー 
  117.         静的  voidレイヤー順序﹤T﹥(ノード﹤T﹥ ルートノード)
  118. {
  119. ノード﹤T﹥[] ノード =新しいノード﹤T﹥[20];
  120.             先頭= -1;
  121.             後方整数= -1;
  122.             ルートノードがnull場合
  123. {
  124. リア++;
  125. ノード[背面] = rootNode;
  126.  
  127. }
  128.  
  129.             一方(前 != 後)
  130. {
  131. フロント++;
  132. rootNode = ノード[front];
  133. コンソールに行を書き込みます。
  134.                  (rootNode.LNode != null )の場合
  135. {
  136. リア++;
  137. ノード[背面] = rootNode.LNode;
  138. }
  139.                  (rootNode.RNode != null )の場合
  140. {
  141. リア++;
  142. ノード[背面] = rootNode.RNode;
  143. }
  144. }
  145. }
  146.         
  147. #終了領域
  148.  
  149. #region テストのメインメソッド 
  150.         静的  void Main(文字列[]引数)
  151. {
  152. ノード﹤文字列﹥ rootNode = BinTree();
  153.  
  154. Console.WriteLine( "バイナリ ツリーをトラバースするための事前順序トラバーサル メソッド:" );
  155. PreOrder﹤文字列﹥(rootNode);
  156.              
  157. Console.WriteLine( "バイナリ ツリーを走査する順序付き走査メソッド:" );
  158. MidOrder﹤文字列﹥(rootNode);
  159.               
  160. Console.WriteLine( "バイナリ ツリーをトラバースするための後順トラバーサル メソッド:" );
  161. AfterOrder﹤文字列﹥(rootNode);
  162.  
  163.  
  164. Console.WriteLine( "バイナリ ツリーをトラバースするレベル トラバーサル メソッド:" );
  165. LayerOrder﹤文字列﹥(rootNode);
  166.  
  167.  
  168. コンソールの読み取り();
  169.  
  170. }
  171. #終了領域 
  172. }
  173. }

これで、C# バイナリ ツリー トラバーサル アルゴリズムの実装の紹介は終わりです。C# バイナリ ツリー トラバーサル アルゴリズムの実装の説明を通じて、C# アルゴリズムについて理解を深めていただければ幸いです。

<<:  C# でのジョセフ リング アルゴリズムの簡単な分析

>>:  C# アルゴリズム アプリケーションでのガウス消去法の実装

ブログ    
ブログ    

推薦する

米国国土安全保障省はマスク着用者の顔認識技術をテストし、精度は96%だった。

1月6日、米国国土安全保障省(DHS)は、毎年開催される3回の生体認証技術カンファレンスでマスク着...

注意メカニズムにバグがあり、ソフトマックスが犯人であり、すべてのトランスフォーマーに影響を与えている

「私は、8年間誰も発見できなかった注目度の式のバグを発見しました。GPTやLLaMAを含むすべてのT...

Bzip2アルゴリズムハードウェアアクセラレーション方式

本発明は、Bzip2 アルゴリズムのハードウェア アクセラレーション実装方法を開示する。この方法は、...

...

モジュラー大型モデルが登場! IBMがWatsonXコアアーキテクチャの技術的詳細を公開

大規模言語モデル (LLM) は強力なパフォーマンスを備えていますが、既存のモデルのトレーニングと展...

コンピュータービジョンにおける次の大きな進歩はどこから生まれるのでしょうか?

翻訳者 | ブガッティレビュー | Chonglou 1950 年代のコンピューター ビジョンの最初...

グラフィカル分散コンセンサスアルゴリズム

本日の記事では、グラフを使用して分散一貫性の実装原則を深く研究し、理解します。まず、自己を見つめ直す...

人工知能が注目を集め、ロボットキャスターが生放送の「新参者」に

北京ビジネスデイリー(陳偉記者) 知能ロボットは記者、シェフ、囲碁の達人になった後、最近は生放送業界...

...

Spring-Smart-DI は実装クラスを動的に切り替えます。非常に優れています。

実際のシステム開発のシナリオでは、同じ機能を複数のサービスプロバイダーに接続する必要があるというタイ...

...

SMIC、AIoT時代の最も価値ある製造業である14nmプロセスチップを量産

SMICは最近、研究開発への投資を増やすことで14nmプロセスチップを量産し、2021年に正式に出荷...

...

スタンフォード大学の人工知能レポート: 今からでも遅くはない

スタンフォード大学は3月3日、2021年人工知能指数レポートを発表しました。その中で、AI関連の学習...