亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、涉及到的知識(shí)點(diǎn)

1.Comparer<T>.Default 屬性

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

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

屬性值

Comparer<T>

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

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

// 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];
 
            // 使用默認(rèn)比較器對(duì)集合進(jìn)行排序
            numbers.Sort(Comparer<int>.Default);
 
            Console.WriteLine(string.Join(", ", numbers));
        }
    }
}
//運(yùn)行結(jié)果:
/*
1, 2, 3, 4
 */

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

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

(1)先設(shè)計(jì)一個(gè)泛型節(jié)點(diǎn)類

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è)計(jì)一個(gè)泛型的二叉樹(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è)計(jì)Main方法

定義一個(gè)二叉樹(shù)類的對(duì)象,引用類中的方法。

BinaryTree<int> tree = new();

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

// 使用泛型節(jié)點(diǎn)類 Node<T>設(shè)計(jì)實(shí)現(xiàn)二叉樹(shù)類
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);
            }
        }
    }
}

運(yùn)行結(jié)果:

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

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

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

這個(gè)程序的實(shí)現(xiàn)是正確的,它可以用于存儲(chǔ)和操作實(shí)現(xiàn)了 System.IComparable<T> 接口的類型。可以根據(jù)需要修改和擴(kuò)展這個(gè)程序,例如,可以添加其他方法來(lái)遍歷和操作二叉樹(shù)。

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

相關(guān)文章

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

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

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

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

    下面小編就為大家?guī)?lái)一篇c# 配置文件App.config操作類庫(kù)的方法。小編覺(jué)的挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • C#中獲取各種文件名的實(shí)現(xiàn)方式

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

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

    c# 異步編程入門(mén)

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

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

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

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

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

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

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

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

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

    WPF實(shí)現(xiàn)倒計(jì)時(shí)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)效果

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

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

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

最新評(píng)論