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

    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