C# でのツリーデータ構造
この記事では、C# のツリーについて説明します。データ構造は、私たちが最初に知る必要があることです。
データ構造をより効率的に使用して、データをコンピューターに配置および保存できます。スタック、リンクリスト、およびキューはすべて、シーケンシャルデータ構造の例です。
C#
のツリーデータ構造
ツリーの形で編成された一種の階層データは、ツリーデータ構造と呼ばれます。これは、中央ノード、構造ノード、およびエッジによって相互にリンクされたサブノードで構成されます。
ツリーデータ構造のルート、ブランチ、およびリーフがリンクされていると述べることもできます。
ツリーは、階層構造でデータを表すために使用される場合があります。ツリーを構成する各ノードは、データと参照の 2つのサブパートで構成されます。
ツリーの最上部にあるノードは、ルートと呼ばれます。そのすぐ下にある 2つの製品は、左サブツリーと右サブツリーと呼ばれます。
ツリーノードを作成するためのコードは次のようになります。
struct node {
int Data;
struct node
*Leftchild;
struct node
*Rightchild;
};
C#
のツリーデータ構造の基本用語
以下は、C# のツリーデータ構造で知っておく必要のある基本的な用語です。
ルートノード
:ツリーの最上位にあるノードはルートと呼ばれます。各ツリーには単一のルートがあり、単一のルートがルートから他のノードにつながります。レベルノード
:ノードのレベルは、生成されたノードの数を反映します。ノードは 1、2 などのレベルの増分で下降し、ルートノードは常に最上位になります。サブツリーノード
:ノードの子孫はサブツリーで表されます。親ノード
:ルート以外のノードが親ノードに接続されている場合、そのノードは親と呼ばれます。子ノード
:ノードのエッジが下降するとき、そのノードはその子ノードと呼ばれます。
C#
のツリーデータ構造の利点
C# でツリーデータ構造を使用する 2つの利点は次のとおりです。
- 配列やリンクリストなどの他のデータ構造と比較する場合、ツリーのサイズを指定する必要はありません。その結果、ツリーはそのストレージスペースの点で効率的です。
- 対照的に、ツリーを操作すると、リンクリストで必要となるノードの挿入、削除、検索などの手間のかかる操作が不要になります。
C#
でツリーデータ構造を構築する手順
ここに、C# のツリーデータ構造の例があります。以下の手順を読んでください。
-
まず、次のライブラリが必要です。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
-
int 型変数
key
、leftn
を左側のノードとして、rightn
を右側のノードとして格納するShanii
クラスにnode
というクラスを作成します。class node { public int key; public node leftn, rightn; };
-
次に、ノードのオブジェクトからルートノードと
z
というノードのリストを作成します。static node rootnode = null; static List<node> z = new List<node>();
-
データを使用してノードを生成するには、
newnode
と呼ばれる関数を作成する必要があります。最初は、この新しいノードの子は両方ともnull
です。static node newnode(int val) { node y = new node(); y.key = val; y.leftn = null; y.rightn = null; return y; }
-
ここで、
if
チェックを使用してノードにアクセスできるかどうかを確認します。はいの場合、現在のノードの左の子が使用されます。if (rootnode == null) { rootnode = node; }
-
使用可能な場合、現在のノードの子が使用されます。このノードの左の子はすでに使用されているため、右の子が使用されます。
else if (z[0].leftn == null) { z[0].leftn = node; }
-
ツリーに新しく追加されたノードのアドレスがキューに追加されます。したがって、子のノードに関する情報を格納するために使用される場合があります。
else { z[0].rightn = node; z.RemoveAt(0); } z.Add(node);
-
次のクラスを使用してツリーを構築します。
static void Constructtree(int[] ar, int a) { for (int i = 0; i < a; i++) InsrtVal(ar[i]); }
-
次の関数は、ノードをレベルに従って編成します。
static void OrderData(node root) {}
10.最後に、ツリーとそのパラメーターを作成および整理するために必要な関数を呼び出します。
```c#
static void Main() {
int[] array = { 29, 39, 49, 59, 69, 79 };
int n = array.Length;
Constructtree(array, n);
OrderData(rootnode);
Console.ReadKey();
}
```
完全なソースコード:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace tree_example {
class Shanii {
class node {
public int key;
public node leftn, rightn;
};
static node rootnode = null;
static List<node> z = new List<node>();
static node newnode(int val) {
node y = new node();
y.key = val;
y.leftn = null;
y.rightn = null;
return y;
}
static void InsrtVal(int newval) {
node node = newnode(newval);
if (rootnode == null) {
rootnode = node;
}
else if (z[0].leftn == null) {
z[0].leftn = node;
}
else {
z[0].rightn = node;
z.RemoveAt(0);
}
z.Add(node);
}
static void Constructtree(int[] ar, int a) {
for (int i = 0; i < a; i++) InsrtVal(ar[i]);
}
static void OrderData(node root) {
if (root == null)
return;
List<node> n = new List<node>();
n.Add(root);
while (n.Count > 0) {
Console.Write(n[0].key + " ");
if (n[0].leftn != null)
n.Add(n[0].leftn);
if (n[0].rightn != null)
n.Add(n[0].rightn);
n.RemoveAt(0);
}
}
static void Main() {
int[] array = { 29, 39, 49, 59, 69, 79 };
int n = array.Length;
Constructtree(array, n);
OrderData(rootnode);
Console.ReadKey();
}
}
}
出力:
29 39 49 59 69 79
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn