C#의 트리 데이터 구조
C#의 나무는 이 기사에서 논의의 주제가 될 것입니다. 데이터 구조는 우리가 가장 먼저 알아야 할 것입니다.
데이터 구조를 사용하여 컴퓨터에서 데이터를 보다 효율적으로 정렬하고 저장할 수 있습니다. 스택, 연결 목록 및 대기열은 모두 순차 데이터 구조의 예입니다.
C#
의 트리 데이터 구조
트리 형태로 구성된 일종의 계층적 데이터를 트리 데이터 구조라고 합니다. 중앙 노드, 구조 노드 및 모서리로 함께 연결된 하위 노드로 구성됩니다.
트리 데이터 구조의 뿌리, 가지, 잎이 연결되어 있다고 말할 수도 있습니다.
트리는 계층 구조에서 데이터를 나타내는 데 사용될 수 있습니다. 트리를 구성하는 각 노드는 데이터와 참조라는 두 가지 하위 부분으로 구성됩니다.
트리의 맨 위에 있는 노드를 루트라고 합니다. 바로 아래에 있는 두 제품을 왼쪽 하위 트리와 오른쪽 하위 트리라고 합니다.
트리 노드를 작성하는 코드는 다음과 같습니다.
struct node {
int Data;
struct node
*Leftchild;
struct node
*Rightchild;
};
C#
에서 트리 데이터 구조의 기본 용어
다음은 C#의 트리 데이터 구조에서 알아야 할 기본 용어입니다.
루트 노드
: 트리 맨 위에 있는 노드를 루트라고 합니다. 각 트리에는 단일 루트가 있으며 단일 경로는 루트에서 다른 노드로 이어집니다.레벨 노드
: 노드의 레벨은 생성된 노드의 수를 반영합니다. 노드는 루트 노드가 항상 맨 위에 있는 상태에서 1, 2 등의 레벨 증분으로 내려갑니다.하위 트리 노드
: 노드의 자손은 하위 트리로 표시됩니다.부모 노드
: 루트 이외의 노드가 부모 노드에 연결되어 있는 경우 이를 부모라고 합니다.자식 노드
: 노드의 가장자리가 하강할 때 해당 노드를 하위 노드라고 합니다.
C#
에서 트리 데이터 구조의 장점
다음은 C#에서 트리 데이터 구조를 사용하는 두 가지 이점입니다.
- 배열이나 연결 목록과 같은 다른 데이터 구조와 비교할 때 트리의 크기를 언급할 필요가 없습니다. 결과적으로 트리는 저장 공간 측면에서 효율적입니다.
- 대조적으로, 트리 작업은 연결 목록에 필요한 노드 삽입, 제거 및 찾기와 같은 노동 집약적인 작업의 필요성을 제거합니다.
C#
에서 트리 데이터 구조를 구축하는 단계
여기에 C#의 트리 데이터 구조의 예가 있습니다. 따라하려면 아래 단계를 읽으십시오.
-
시작하려면 다음 라이브러리가 있어야 합니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
-
Shanii
클래스에서 int 유형 변수key
,leftn
을 왼쪽 노드로,rightn
을 오른쪽 노드로 저장하는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) {}
-
마지막으로 나무와 그 매개변수를 만들고 구성하는 데 필요한 함수를 호출합니다.
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