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# アルゴリズム アプリケーションでのガウス消去法の実装

ブログ    

推薦する

GPU + 生成AIが時空間データ分析の改善に貢献

翻訳者|朱 仙中レビュー | Chonglou導入携帯電話、気候センサー、金融市場取引、車両や輸送コ...

中国はビッグデータ、人工知能、遺伝子技術などに関する知的財産法制の整備を加速させる。

中国共産党中央委員会と国務院がこのほど発表した「知的財産強国建設要綱(2021~2035年)」では、...

...

...

...

...

定量評価、アルゴリズム拡張:強化学習研究の10原則

[[252430]]ビッグデータダイジェスト制作編纂者:江宝尚今年 9 月に開催された Deep L...

Java プログラミング スキル - データ構造とアルゴリズム「マージ ソート」

[[393503]]基本的な紹介マージソートは、マージの考え方を使用するソート方法です。このアルゴ...

...

...

生成型人工知能が経済と社会に与える影響

生成アルゴリズム、事前トレーニング済みモデル、マルチモーダルなどの技術の累積的な統合と反復を経て、人...

...

人工知能とVRを融合し、多様な体験を実現

人工知能サービス - Microsoft Cognitive Services には当初、視覚、音声...

...

たった 14 ステップ: Python 機械学習をゼロからマスターする (リソース付き)

Python は現在、機械学習で最も人気のある言語であると言っても過言ではなく、オンラインでも膨大...