C#算法设计排序篇之11-二叉树排序(附带动画演示程序)
二叉树排序(Binary Tree Sort)
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/695 访问。
二叉树排序是构建在二叉排序树(Binary Sort Tree)上的算法,二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
- 若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
- 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
- 左、右子树也分别为二叉排序树。
二叉树排序需要先生成一个二叉排序树,再使用中序遍历输出所有数据。
示例:
public class BinarySortTreeNode {public int Key { get; set; }public BinarySortTreeNode Left { get; set; }public BinarySortTreeNode Right { get; set; }public BinarySortTreeNode(int key) {Key = key;}public void Insert(int key) {var tree = new BinarySortTreeNode(key);if (tree.Key <= Key) {if (Left == null) {Left = tree;}else {Left.Insert(key);}}else {if (Right == null) {Right = tree;}else {Right.Insert(key);}}}/// <summary>/// 中序遍历/// </summary>public void InorderTraversal() {Left?.InorderTraversal();Console.Write($"{Key} ");Right?.InorderTraversal();}}
public class Program {public static void Main(string[] args) {int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 };BinaryTreeSort(array);Console.ReadKey();}public static void BinaryTreeSort(int[] array) {var binarySortTreeNode = new BinarySortTreeNode(array[0]);for (int i = 1; i < array.Length; i++) {binarySortTreeNode.Insert(array[i]);}binarySortTreeNode.InorderTraversal();}}
以上是二叉树排序算法的一种实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/695 访问。
8 11 21 28 32 43 48 56 69 72 80 94
分析:
二叉树排序算法的时间复杂度为: 。
AlgorithmMan:
AlgorithmMan by Iori,AlgorithmMan是使用C#开发的一套用于算法演示的工具。
下载链接:AlgorithmMan-BinaryTreeSort
C#算法设计排序篇之11-二叉树排序(附带动画演示程序)相关推荐
- C#算法设计排序篇之04-选择排序(附带动画演示程序)
选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...
- 算法设计与分析——十大经典排序算法一(1--5)
目录 算法设计与分析--十大经典排序算法 第1关:冒泡排序 参考代码 第2关:选择排序 参考代码 第3关:插入排序 参考代码 第4关:希尔排序 参考代码 第5关:归并排序 参考代码 作者有言 一个不知 ...
- 算法设计与分析——十大经典排序算法二(6--10)
一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2023.3.1 Las ...
- 算法设计和数据结构学习_2(常见排序算法思想)
一般约定我们是按照从小到大的顺序排序. 按照向量的形式来参考排序中数组元素的相对位置,行向量中最左边为数组的第一个元素,且称为前面.列向量中最上面的元素为数组的第一个元素,也是称为前边. 对常见的排序 ...
- 【经典算法学习-排序篇】直接选择排序
一.选择排序 1.基本概念和介绍 选择排序的核心思想是:每一趟从无序区中选出关键字最小(或最大)的元素,按顺序放在有序区的最后(生成新的有序区,无序区元素个数减1),直到全部排完为止. 换句话说就是: ...
- C#算法设计排序篇之06-堆排序(附带动画演示程序)
堆排序(Heap Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/685 访问. 堆排序是指利用堆积树(堆)这 ...
- C#算法设计排序篇之10-桶排序(附带动画演示程序)
桶排序(Bucket Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/693 访问. 桶排序的工作原理是将数组 ...
- C#算法设计排序篇之09-基数排序(附带动画演示程序)
基数排序(Radix Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/691 访问. 基数排序属于" ...
- C#算法设计排序篇之08-计数排序(附带动画演示程序)
计数排序(Counting Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/689 访问. 计数排序是一个非基 ...
最新文章
- java实时汇率的接口_eoLinker-API_Shop_汇率查询_API接口_Java调用示例代码
- from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver,
- 互联网架构,究竟为啥要做服务化?
- LeetCode 01【两数之和】【LeetCode人生第一题!】
- e2fsck -y 故障_MC2-XWHM-Y
- SpringBoot自动化配置之一:SpringBoot内部的一些自动化配置原理
- C++ Ouput Exactly 2 Digits After Decimal Point 小数点后保留三位数字
- springboot如何对本地数据库增删改查_SpringBoot整合Mybatis实现数据库增删改查
- cudaMemcpyToSymbol使用
- Iphone开发之音频101(part 2):转换和录音
- Qt文档阅读笔记-单元测试中构建标准检测程序(CPU、Linux性能、内存泄漏等)
- java inputstream长度_Java InputStream.available获取数据流字节长度大小
- 让刺猬和狐狸结婚:资本巨鳄BlackRock的金融科技野心
- ProtoBuf(Google Protocol Buffers)—— repeated 修饰字段注意点(packed修饰)
- 【LOJ2863】【IOI2018】组合动作(交互)
- remix os显卡linux,Remix OS 系统 PC版下载和评测 | Remix OS是什么系统_什么值得买
- 快速上手飞桨PaddleClas图像分类库
- 【编辑器】unity自动化生成UI模板代码
- MATLAB语音端点检测
- RGBD三维重建——SeamlessTex运行环境配置(采坑指南)