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
類中建立一個名為node
的類,該類儲存 int 型別變數key
,leftn
作為左節點,rightn
作為右節點。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