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 バイナリ トラバーサル アルゴリズム ソリューション全体のコードは次のとおりです。 - システムの使用;
- System.Collections.Genericを使用します。
- System.Textを使用します。
-
- 名前空間構造
- {
- クラスプログラム
- {
- #region バイナリツリーノードデータ構造の定義
-
- クラスノード﹤T﹥
- {
- Tデータ;
- ノード﹤T﹥ Lnode、Rnode、Pnode;
- 公開Tデータ
- {
- {データ = 値; }を設定します
- 取得{データを返す; }
-
- }
- パブリックノード﹤T﹥ LNode
- {
- 設定{ Lnode = 値; }
- 取得{戻り値 Lnode; }
- }
- パブリックノード﹤T﹥ RNode
- {
- 設定{ Rnode = 値; }
- 取得{戻り値 Rnode; }
-
- }
-
- パブリックノード﹤T﹥ PNode
- {
- 設定{ Pnode = 値; }
- 取得{ Pnodeを返す; }
-
- }
- パブリックノード()
- { }
- パブリックノード(Tデータ)
- {
- this .data = データ;
- }
-
- }
- #終了領域
-
- #region 事前順序バイナリツリー
- 静的 void PreOrder﹤T﹥(ノード﹤T﹥ rootNode)
- {
- ルートノードがnullの場合
- {
- コンソールに行を書き込みます。
- PreOrder﹤T﹥(rootNode.LNode);
- PreOrder﹤T﹥(rootNode.RNode);
-
- }
- }
-
- #終了領域
-
- #region 既知の二分木を構築する
-
- 静的ノード﹤文字列﹥ BinTree()
- {
- ノード﹤文字列﹥[] binTree =新しいノード﹤文字列﹥[8];
-
- binTree[0] =新しいノード﹤ string ﹥( "A" );
- binTree[1] =新しいノード﹤ string ﹥( "B" );
- binTree[2] =新しいノード﹤ string ﹥( "C" );
- binTree[3] =新しいノード﹤ string ﹥( "D" );
- binTree[4] =新しいノード﹤ string ﹥( "E" );
- binTree[5] =新しいノード﹤ string ﹥( "F" );
- binTree[6] =新しいノード﹤ string ﹥( "G" );
- binTree[7] =新しいノード﹤ string ﹥( "H" );
-
-
- binTree[0].LNode = binTree[1];
- binTree[0].RNode = binTree[2];
- binTree[1].RNode = binTree[3];
- binTree[2].LNode = binTree[4];
- binTree[2].RNode = binTree[5];
- binTree[3].LNode = binTree[6];
- binTree[3].RNode = binTree[7];
-
- binTree[0]を返します。
-
- }
- #終了領域
-
- #region バイナリツリーの順序走査
- 静的 void MidOrder﹤T﹥(ノード﹤T﹥ ルートノード)
- {
- ルートノードがnullの場合
- {
- MidOrder﹤T﹥(ルートノード.LNode);
- コンソールに行を書き込みます。
- MidOrder﹤T﹥(ルートノード.RNode);
- }
- }
- #終了領域
- 二分木のポストオーダー走査#region 二分木のポストオーダー走査
- 静的 void AfterOrder﹤T﹥(ノード﹤T﹥ ルートノード)
- {
- ルートノードがnullの場合
- {
- AfterOrder﹤T﹥(rootNode.LNode);
- AfterOrder﹤T﹥(rootNode.RNode);
- コンソールに行を書き込みます。
- }
-
- }
- #終了領域
-
- #領域レベルのトラバーサルバイナリツリー
- 静的 voidレイヤー順序﹤T﹥(ノード﹤T﹥ ルートノード)
- {
- ノード﹤T﹥[] ノード =新しいノード﹤T﹥[20];
- 先頭= -1;
- 後方整数= -1;
- ルートノードがnullの場合
- {
- リア++;
- ノード[背面] = rootNode;
-
- }
-
- 一方(前 != 後)
- {
- フロント++;
- rootNode = ノード[front];
- コンソールに行を書き込みます。
- (rootNode.LNode != null )の場合
- {
- リア++;
- ノード[背面] = rootNode.LNode;
- }
- (rootNode.RNode != null )の場合
- {
- リア++;
- ノード[背面] = rootNode.RNode;
- }
- }
- }
-
- #終了領域
-
- #region テストのメインメソッド
- 静的 void Main(文字列[]引数)
- {
- ノード﹤文字列﹥ rootNode = BinTree();
-
- Console.WriteLine( "バイナリ ツリーをトラバースするための事前順序トラバーサル メソッド:" );
- PreOrder﹤文字列﹥(rootNode);
-
- Console.WriteLine( "バイナリ ツリーを走査する順序付き走査メソッド:" );
- MidOrder﹤文字列﹥(rootNode);
-
- Console.WriteLine( "バイナリ ツリーをトラバースするための後順トラバーサル メソッド:" );
- AfterOrder﹤文字列﹥(rootNode);
-
-
- Console.WriteLine( "バイナリ ツリーをトラバースするレベル トラバーサル メソッド:" );
- LayerOrder﹤文字列﹥(rootNode);
-
-
- コンソールの読み取り();
-
- }
- #終了領域
- }
- }
これで、C# バイナリ ツリー トラバーサル アルゴリズムの実装の紹介は終わりです。C# バイナリ ツリー トラバーサル アルゴリズムの実装の説明を通じて、C# アルゴリズムについて理解を深めていただければ幸いです。 |