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

ブログ    

推薦する

GPT-5は来年登場?内部告発者は、マルチモーダルゴビはGPT-5であり、自己認識能力を示していることを明らかにした。

OpenAI 初の開発者会議は AI の饗宴です。 GPT-4 Turbo、大幅な値下げ、開発者向...

今後の国内人工知能産業の発展における5つの大きなトレンド

現在、中国で人工知能の分野で最も多くの投資を受けている5つのサブセクターは、コンピュータービジョン(...

百度の女性デーのポスターはスマートライフの姿を描いている:人工知能は女性をより自由にする

社会の進歩と国民の意識の高まりに伴い、社会全体が女性の権利にますます注目するようになっています。 3...

高性能 HTTP サーバーの負荷分散アルゴリズムは何ですか?ほとんどのプログラマーは収集しています...

典型的な高同時実行性、大規模ユーザー Web インターネット システムのアーキテクチャ設計では、HT...

機械学習がデジタルビジネスの未来をどう変えるのか

[[197043]] IDC Futurescapes レポートによると、世界のトップ 2,000 ...

人工知能とセキュリティ:繋がる双子

何十年もの間、セキュリティは重要であると考えられてきましたが、いわゆる「コアビジネス」機能に関与した...

中国の科学者によるこの命を救うAIは海外のホットリストに載った

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

推奨される自動化およびオーケストレーションツール10選

自動化およびオーケストレーション ネットワーク ツールは、人間のオペレーターよりも高速かつ正確にタス...

...

機械学習とコンピュータービジョンのためのトップ 20 画像データセット

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

繊毛もチップにできる!コーネル大学の中国人博士課程学生の初の論文がネイチャーの表紙に掲載

チップを作る上で最も重要な部分は何ですか? より高度な製造プロセスを使用してトランジスタ密度と計算能...

機械学習の運用が増加している

データにラベルを付け、正確な機械学習モデルを開発することはデータ サイエンティストにとって困難であり...

米国のAI雇用市場の現在の規模を解読する

[[342720]] 人工知能の分野でのこの国の雇用機会はどのようなものでしょうか?私たちはすべてが...