最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、涉及到的知識點

1.Comparer<T>.Default 屬性

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

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

屬性值

Comparer<T>

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

Comparer<T>.Default 屬性是 C# 中 System.Collections.Generic命名空間下的一個屬性。它返回一個 Comparer<T> 對象的默認(rèn)實例,該對象可以對泛型集合中的對象進(jìn)行比較。默認(rèn)情況下,這個比較器根據(jù)對象的自然順序進(jìn)行比較,即通過調(diào)用對象的 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)比較器對集合進(jìn)行排序
            numbers.Sort(Comparer<int>.Default);
 
            Console.WriteLine(string.Join(", ", numbers));
        }
    }
}
//運行結(jié)果:
/*
1, 2, 3, 4
 */

在這個例子中創(chuàng)建了一個包含整數(shù)的列表。然后,使用 Comparer<int>.Default 屬性提供的默認(rèn)比較器對列表進(jìn)行排序。最后,輸出排序后的列表,可以看到數(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)二叉樹類的詳細(xì)內(nèi)容,更多關(guān)于C#二叉樹類的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#實現(xiàn)用戶自定義控件中嵌入自己的圖標(biāo)

    C#實現(xiàn)用戶自定義控件中嵌入自己的圖標(biāo)

    這篇文章主要介紹了C#實現(xiàn)用戶自定義控件中嵌入自己的圖標(biāo),較為詳細(xì)的分析了C#實現(xiàn)自定義控件中嵌入圖標(biāo)的具體步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-03-03
  • C# WinForm控件對透明圖片重疊時出現(xiàn)圖片不透明的簡單解決方法

    C# WinForm控件對透明圖片重疊時出現(xiàn)圖片不透明的簡單解決方法

    這篇文章主要介紹了C# WinForm控件對透明圖片重疊時出現(xiàn)圖片不透明的簡單解決方法,結(jié)合實例形式分析了WinForm圖片重疊后造成圖片不透明的原因與相應(yīng)的解決方法,需要的朋友可以參考下
    2016-06-06
  • C#利用控件拖拽技術(shù)制作拼圖游戲

    C#利用控件拖拽技術(shù)制作拼圖游戲

    這篇文章主要介紹了C#利用控件拖拽技術(shù)制作拼圖游戲的方法以及核心代碼,需要的朋友可以參考下
    2015-06-06
  • 詳解WPF如何在基礎(chǔ)控件上顯示Loading等待動畫

    詳解WPF如何在基礎(chǔ)控件上顯示Loading等待動畫

    這篇文章主要為大家詳細(xì)介紹了WPF如何在基礎(chǔ)控件上顯示Loading等待動畫的效果,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,需要的可以參考一下
    2023-04-04
  • C#使用Spire.XLS for .NET將Markdown轉(zhuǎn)換為PDF和Excel的完整指南

    C#使用Spire.XLS for .NET將Markdown轉(zhuǎn)換為PDF和Excel的完整指南

    在當(dāng)今數(shù)字化的世界中,Markdown已成為開發(fā)者、作者和內(nèi)容創(chuàng)作者的首選標(biāo)記語言,然而,當(dāng)我們需要將這些內(nèi)容進(jìn)行分發(fā)、歸檔或進(jìn)行數(shù)據(jù)分析時,Markdown的純文本格式便顯得力不從心了,本文將深入探討如何在C# .NET環(huán)境中將Markdown內(nèi)容轉(zhuǎn)換為PDF和Excel格式
    2025-12-12
  • C#實現(xiàn)把txt文本數(shù)據(jù)快速讀取到excel中

    C#實現(xiàn)把txt文本數(shù)據(jù)快速讀取到excel中

    這篇文章主要介紹了C#實現(xiàn)把txt文本數(shù)據(jù)快速讀取到excel中,本文直接給出示例代碼,需要的朋友可以參考下
    2015-06-06
  • WinForm程序?qū)崿F(xiàn)在線更新軟件功能的具體步驟

    WinForm程序?qū)崿F(xiàn)在線更新軟件功能的具體步驟

    本文詳細(xì)介紹了WinForm程序LWH.exe實現(xiàn)遠(yuǎn)程升級的步驟:通過FTP服務(wù)器存放更新包,對比版本號后下載解壓替換文件,利用獨立更新工具完成升級,實現(xiàn)軟件在線更新功能,需要的朋友可以參考下
    2025-05-05
  • WPF自動隱藏的消息框的實例代碼

    WPF自動隱藏的消息框的實例代碼

    本文給大家介紹WPF自動隱藏的消息框?qū)嵗a,當(dāng)鼠標(biāo)放上去將一直顯示,移開動畫繼續(xù),提供normal和error兩種邊框。非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧
    2016-07-07
  • C#實現(xiàn)六大設(shè)計原則之里氏替換原則

    C#實現(xiàn)六大設(shè)計原則之里氏替換原則

    這篇文章介紹了C#實現(xiàn)六大設(shè)計原則之里氏替換原則的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C#?在PDF中添加墨跡注釋Ink?Annotation的步驟詳解

    C#?在PDF中添加墨跡注釋Ink?Annotation的步驟詳解

    PDF中的墨跡注釋表現(xiàn)為徒手涂鴉式的形狀,該類型的注釋,可任意指定形狀頂點的位置及個數(shù),通過指定的頂點,程序?qū)⑦B接各點繪制成平滑的曲線,下面通過C#程序代碼介紹下在pdf中添加注釋的步驟,感興趣的朋友一起看看吧
    2022-02-02

最新評論

平和县| 武陟县| 安顺市| 恭城| 阳泉市| 贵阳市| 九台市| 隆德县| 彭州市| 新绛县| 乐陵市| 定州市| 景德镇市| 延边| 云和县| 南丹县| 通化市| 茶陵县| 长海县| 南皮县| 塔河县| 霞浦县| 于都县| 清丰县| 灵台县| 尉犁县| 图片| 梁河县| 瑞丽市| 工布江达县| 莱州市| 肇庆市| 延边| 澄江县| 朝阳市| 手游| 西和县| 金川县| 巴中市| 沾化县| 宝应县|