C#의 트리 데이터 구조

Muhammad Zeeshan 2023년10월12일
  1. C#의 트리 데이터 구조
  2. C#에서 트리 데이터 구조를 구축하는 단계
C#의 트리 데이터 구조

C#의 나무는 이 기사에서 논의의 주제가 될 것입니다. 데이터 구조는 우리가 가장 먼저 알아야 할 것입니다.

데이터 구조를 사용하여 컴퓨터에서 데이터를 보다 효율적으로 정렬하고 저장할 수 있습니다. 스택, 연결 목록 및 대기열은 모두 순차 데이터 구조의 예입니다.

C#의 트리 데이터 구조

트리 형태로 구성된 일종의 계층적 데이터를 트리 데이터 구조라고 합니다. 중앙 노드, 구조 노드 및 모서리로 함께 연결된 하위 노드로 구성됩니다.

트리 데이터 구조의 뿌리, 가지, 잎이 연결되어 있다고 말할 수도 있습니다.

트리는 계층 구조에서 데이터를 나타내는 데 사용될 수 있습니다. 트리를 구성하는 각 노드는 데이터와 참조라는 두 가지 하위 부분으로 구성됩니다.

트리의 맨 위에 있는 노드를 루트라고 합니다. 바로 아래에 있는 두 제품을 왼쪽 하위 트리와 오른쪽 하위 트리라고 합니다.

트리 노드를 작성하는 코드는 다음과 같습니다.

struct node {
  int Data;
  struct node
  *Leftchild;
  struct node
  *Rightchild;
};

C#에서 트리 데이터 구조의 기본 용어

다음은 C#의 트리 데이터 구조에서 알아야 할 기본 용어입니다.

  • 루트 노드: 트리 맨 위에 있는 노드를 루트라고 합니다. 각 트리에는 단일 루트가 있으며 단일 경로는 루트에서 다른 노드로 이어집니다.
  • 레벨 노드: 노드의 레벨은 생성된 노드의 수를 반영합니다. 노드는 루트 노드가 항상 맨 위에 있는 상태에서 1, 2 등의 레벨 증분으로 내려갑니다.
  • 하위 트리 노드: 노드의 자손은 하위 트리로 표시됩니다.
  • 부모 노드: 루트 이외의 노드가 부모 노드에 연결되어 있는 경우 이를 부모라고 합니다.
  • 자식 노드: 노드의 가장자리가 하강할 때 해당 노드를 하위 노드라고 합니다.

C#에서 트리 데이터 구조의 장점

다음은 C#에서 트리 데이터 구조를 사용하는 두 가지 이점입니다.

  1. 배열이나 연결 목록과 같은 다른 데이터 구조와 비교할 때 트리의 크기를 언급할 필요가 없습니다. 결과적으로 트리는 저장 공간 측면에서 효율적입니다.
  2. 대조적으로, 트리 작업은 연결 목록에 필요한 노드 삽입, 제거 및 찾기와 같은 노동 집약적인 작업의 필요성을 제거합니다.

C#에서 트리 데이터 구조를 구축하는 단계

여기에 C#의 트리 데이터 구조의 예가 있습니다. 따라하려면 아래 단계를 읽으십시오.

  1. 시작하려면 다음 라이브러리가 있어야 합니다.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
  2. Shanii 클래스에서 int 유형 변수 key, leftn을 왼쪽 노드로, rightn을 오른쪽 노드로 저장하는 node라는 클래스를 만듭니다.

    class node {
      public int key;
      public node leftn, rightn;
    };
    
  3. 그런 다음 노드의 개체에서 루트 노드와 z라는 노드 목록을 만듭니다.

    static node rootnode = null;
    static List<node> z = new List<node>();
    
  1. 데이터로 노드를 생성하려면 newnode라는 함수를 작성해야 합니다. 처음에 이 새 노드의 자식은 모두 null입니다.

    static node newnode(int val) {
      node y = new node();
      y.key = val;
      y.leftn = null;
      y.rightn = null;
      return y;
    }
    
  2. 이제 if 검사를 사용하여 노드에 액세스할 수 있는지 확인합니다. 그렇다면 현재 노드의 왼쪽 자식이 사용됩니다.

    if (rootnode == null) {
      rootnode = node;
    }
    
  3. 사용 가능한 경우 현재 노드 자식이 활용됩니다. 이 노드의 왼쪽 자식이 이미 사용되었으므로 오른쪽 자식이 활용됩니다.

    else if (z[0].leftn == null) {
      z[0].leftn = node;
    }
    
  4. 트리에 새로 추가된 노드의 주소가 큐에 추가됩니다. 따라서 자식 노드에 대한 정보를 저장하는 데 사용할 수 있습니다.

    else {
      z[0].rightn = node;
      z.RemoveAt(0);
    }
    z.Add(node);
    
  5. 다음 클래스는 트리를 구성하는 데 사용됩니다.

    static void Constructtree(int[] ar, int a) {
      for (int i = 0; i < a; i++) InsrtVal(ar[i]);
    }
    
  6. 다음 기능은 노드를 레벨에 따라 구성합니다.

    static void OrderData(node root) {}
    
  7. 마지막으로 나무와 그 매개변수를 만들고 구성하는 데 필요한 함수를 호출합니다.

    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 
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

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