欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#使用自定義的泛型節(jié)點類實現(xiàn)二叉樹類

 更新時間:2024年03月10日 08:53:01   作者:wenchm  
這篇文章主要為大家詳細介紹了C#如何使用自定義的泛型節(jié)點類 Node<T>實現(xiàn)二叉樹類BinaryTree<T>及其方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、涉及到的知識點

1.Comparer<T>.Default 屬性

返回由泛型參數(shù)指定的類型的默認排序順序比較器。

public static System.Collections.Generic.Comparer<T> Default { get; }

屬性值

Comparer<T>

繼承 Comparer<T> 并作為 T 類型的排序順序比較器的對象。

Comparer<T>.Default 屬性是 C# 中 System.Collections.Generic命名空間下的一個屬性。它返回一個 Comparer<T> 對象的默認實例,該對象可以對泛型集合中的對象進行比較。默認情況下,這個比較器根據(jù)對象的自然順序進行比較,即通過調(diào)用對象的 CompareTo 方法進行比較。

// Comparer<T>.Default 屬性
 
namespace _135_3
{
    public class Program
    {
        public static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);
 
            List<int> numbers = [3, 1, 4, 2];
 
            // 使用默認比較器對集合進行排序
            numbers.Sort(Comparer<int>.Default);
 
            Console.WriteLine(string.Join(", ", numbers));
        }
    }
}
//運行結(jié)果:
/*
1, 2, 3, 4
 */

在這個例子中創(chuàng)建了一個包含整數(shù)的列表。然后,使用 Comparer<int>.Default 屬性提供的默認比較器對列表進行排序。最后,輸出排序后的列表,可以看到數(shù)字已經(jīng)按照升序排列。

2.實現(xiàn)二叉樹類BinaryTree<T>步驟

(1)先設(shè)計一個泛型節(jié)點類

public class Node<T>(T value)
{
    public T Data { get; set; } = value;
    public Node<T>? Left { get; set; } = null;
    public Node<T>? Right { get; set; } = null;
}

(2)再設(shè)計一個泛型的二叉樹類

public class BinaryTree<T>
{
    public Node<T>? Root { get; private set; }
 
    public void AddNode(T value)
    {
        Node<T> newNode = new(value);
        if (Root == null)
        {
            Root = newNode;
        }
        else
        {
            Node<T> current = Root;
            while (true)
            {
                if (Comparer<T>.Default.Compare(value, current.Data) < 0)
                {
                    if (current.Left == null)
                    {
                        current.Left = newNode;
                        break;
                    }
                    current = current.Left;
                }
                else
                {
                    if (current.Right == null)
                    {
                        current.Right = newNode;
                        break;
                    }
                    current = current.Right;
                }
            }
        }
    }
}

(3)最后設(shè)計Main方法

定義一個二叉樹類的對象,引用類中的方法。

BinaryTree<int> tree = new();

二、 使用泛型節(jié)點類 Node<T>實現(xiàn)二叉樹類BinaryTree<T>

// 使用泛型節(jié)點類 Node<T>設(shè)計實現(xiàn)二叉樹類
namespace _135_1
{
    public class Node<T>(T value)
    {
        public T Data { get; set; } = value;
        public Node<T>? Left { get; set; } = null;
        public Node<T>? Right { get; set; } = null;
    }
 
    public class BinaryTree<T>
    {
        public Node<T>? Root { get; private set; }
 
        public void AddNode(T value)
        {
            Node<T> newNode = new(value);
            if (Root == null)
            {
                Root = newNode;
            }
            else
            {
                Node<T> current = Root;
                while (true)
                {
                    if (Comparer<T>.Default.Compare(value, current.Data) < 0)
                    {
                        if (current.Left == null)
                        {
                            current.Left = newNode;
                            break;
                        }
                        current = current.Left;
                    }
                    else
                    {
                        if (current.Right == null)
                        {
                            current.Right = newNode;
                            break;
                        }
                        current = current.Right;
                    }
                }
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);
 
            BinaryTree<int> tree = new();
            tree.AddNode(5);
            tree.AddNode(3);
            tree.AddNode(8);
            tree.AddNode(1);
            tree.AddNode(4);
            tree.AddNode(7);
 
            Console.WriteLine("中序遍歷:");
            PrintInOrder(tree.Root!);
 
            Console.WriteLine("前序遍歷:");
            PrintPreOrder(tree.Root!);
 
            Console.WriteLine("后序遍歷:");
            PrintPostOrder(tree.Root!);
 
            Console.ReadKey();
        }
 
        static void PrintInOrder(Node<int> node)
        {
            if (node != null)
            {
                PrintInOrder(node.Left!);
                Console.WriteLine(node.Data);
                PrintInOrder(node.Right!);
            }
        }
 
        static void PrintPreOrder(Node<int> node)
        {
            if (node != null)
            {
                Console.WriteLine(node.Data);
                PrintPreOrder(node.Left!);
                PrintPreOrder(node.Right!);
            }
        }
 
        static void PrintPostOrder(Node<int> node)
        {
            if (node != null)
            {
                PrintPostOrder(node.Left!);
                PrintPostOrder(node.Right!);
                Console.WriteLine(node.Data);
            }
        }
    }
}

運行結(jié)果:

中序遍歷:
1
3
4
5
7
8
前序遍歷:
5
3
1
4
8
7
后序遍歷:
1
4
3
7
8
5

在這個實例中使用 Comparer<T>.Default 來比較兩個值的大小。這個方法適用于任何實現(xiàn)了 System.IComparable<T> 接口的類型,因此可以使用任何實現(xiàn)了該接口的值類型或引用類型。

這個程序的主要功能是添加一個新的節(jié)點到二叉樹中。它首先檢查根節(jié)點是否為空,如果為空,則將新的節(jié)點設(shè)置為根節(jié)點。否則,它將從根節(jié)點開始,遞歸地遍歷二叉樹,找到合適的位置插入新的節(jié)點。

這個程序的實現(xiàn)是正確的,它可以用于存儲和操作實現(xiàn)了 System.IComparable<T> 接口的類型??梢愿鶕?jù)需要修改和擴展這個程序,例如,可以添加其他方法來遍歷和操作二叉樹。

以上就是C#使用自定義的泛型節(jié)點類實現(xiàn)二叉樹類的詳細內(nèi)容,更多關(guān)于C#二叉樹類的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#日期時間類的使用方法(DateTime類、TimeSpan類與DateTimeOffset類)

    C#日期時間類的使用方法(DateTime類、TimeSpan類與DateTimeOffset類)

    在C#中我們常使用到關(guān)于時間的相關(guān)操作,這篇文章主要給大家介紹了關(guān)于C#日期時間類的使用方法,文中介紹的方法分別包括DateTime類、TimeSpan類與DateTimeOffset類的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • c# 配置文件App.config操作類庫的方法

    c# 配置文件App.config操作類庫的方法

    下面小編就為大家?guī)硪黄猚# 配置文件App.config操作類庫的方法。小編覺的挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C#中獲取各種文件名的實現(xiàn)方式

    C#中獲取各種文件名的實現(xiàn)方式

    這篇文章主要介紹了C#中獲取各種文件名的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • c# 異步編程入門

    c# 異步編程入門

    這篇文章主要介紹了c# 異步編程入門的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • Unity實現(xiàn)文本轉(zhuǎn)貼圖

    Unity實現(xiàn)文本轉(zhuǎn)貼圖

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)文本轉(zhuǎn)貼圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • WPF實現(xiàn)魔方小游戲

    WPF實現(xiàn)魔方小游戲

    這篇文章主要為大家詳細介紹了WPF實現(xiàn)魔方小游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C#實現(xiàn)讀取Word表格到DataSet

    C#實現(xiàn)讀取Word表格到DataSet

    在應(yīng)用項目里,多數(shù)情況下我們會遇到導(dǎo)入 Excel 文件數(shù)據(jù)到數(shù)據(jù)庫的功能需求,但某些情況下,也存在使用 Word 進行表格數(shù)據(jù)編輯的情況,這其中也包括導(dǎo)入Word內(nèi)容的功能,比如表格數(shù)據(jù)導(dǎo)出到DataSet數(shù)據(jù)集,本文將給大家介紹了C#讀取Word表格到DataSet
    2023-12-12
  • C#中把日志導(dǎo)出到txt文本的簡單實例

    C#中把日志導(dǎo)出到txt文本的簡單實例

    這篇文章介紹了C#中把日志導(dǎo)出到txt文本的簡單實例,有需要的朋友可以參考一下
    2013-10-10
  • WPF實現(xiàn)倒計時轉(zhuǎn)場動畫效果

    WPF實現(xiàn)倒計時轉(zhuǎn)場動畫效果

    這篇文章主要介紹了如何利用WPF實現(xiàn)倒計時轉(zhuǎn)場動畫效果,文中的示例代碼講解詳細,對我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下
    2022-08-08
  • C#域名解析簡單實現(xiàn)方法

    C#域名解析簡單實現(xiàn)方法

    這篇文章主要介紹了C#域名解析簡單實現(xiàn)方法,可實現(xiàn)針對域名解析顯示出主機名、IP地址、別名等功能,需要的朋友可以參考下
    2015-07-07

最新評論