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; }
- 
使用可能な場合、現在のノードの子が使用されます。このノードの左の子はすでに使用されているため、右の子が使用されます。 
```c#
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