二叉树排序(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-二叉树排序(附带动画演示程序)相关推荐

  1. C#算法设计排序篇之04-选择排序(附带动画演示程序)

    选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...

  2. 算法设计与分析——十大经典排序算法一(1--5)

    目录 算法设计与分析--十大经典排序算法 第1关:冒泡排序 参考代码 第2关:选择排序 参考代码 第3关:插入排序 参考代码 第4关:希尔排序 参考代码 第5关:归并排序 参考代码 作者有言 一个不知 ...

  3. 算法设计与分析——十大经典排序算法二(6--10)

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com  Time of completion:2023.3.1 Las ...

  4. 算法设计和数据结构学习_2(常见排序算法思想)

    一般约定我们是按照从小到大的顺序排序. 按照向量的形式来参考排序中数组元素的相对位置,行向量中最左边为数组的第一个元素,且称为前面.列向量中最上面的元素为数组的第一个元素,也是称为前边. 对常见的排序 ...

  5. 【经典算法学习-排序篇】直接选择排序

    一.选择排序 1.基本概念和介绍 选择排序的核心思想是:每一趟从无序区中选出关键字最小(或最大)的元素,按顺序放在有序区的最后(生成新的有序区,无序区元素个数减1),直到全部排完为止. 换句话说就是: ...

  6. C#算法设计排序篇之06-堆排序(附带动画演示程序)

    堆排序(Heap Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/685 访问. 堆排序是指利用堆积树(堆)这 ...

  7. C#算法设计排序篇之10-桶排序(附带动画演示程序)

    桶排序(Bucket Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/693 访问. 桶排序的工作原理是将数组 ...

  8. C#算法设计排序篇之09-基数排序(附带动画演示程序)

    基数排序(Radix Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/691 访问. 基数排序属于" ...

  9. C#算法设计排序篇之08-计数排序(附带动画演示程序)

    计数排序(Counting Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/689 访问. 计数排序是一个非基 ...

最新文章

  1. java实时汇率的接口_eoLinker-API_Shop_汇率查询_API接口_Java调用示例代码
  2. from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver,
  3. 互联网架构,究竟为啥要做服务化?
  4. LeetCode 01【两数之和】【LeetCode人生第一题!】
  5. e2fsck -y 故障_MC2-XWHM-Y
  6. SpringBoot自动化配置之一:SpringBoot内部的一些自动化配置原理
  7. C++ Ouput Exactly 2 Digits After Decimal Point 小数点后保留三位数字
  8. springboot如何对本地数据库增删改查_SpringBoot整合Mybatis实现数据库增删改查
  9. cudaMemcpyToSymbol使用
  10. Iphone开发之音频101(part 2):转换和录音
  11. Qt文档阅读笔记-单元测试中构建标准检测程序(CPU、Linux性能、内存泄漏等)
  12. java inputstream长度_Java InputStream.available获取数据流字节长度大小
  13. 让刺猬和狐狸结婚:资本巨鳄BlackRock的金融科技野心
  14. ProtoBuf(Google Protocol Buffers)—— repeated 修饰字段注意点(packed修饰)
  15. 【LOJ2863】【IOI2018】组合动作(交互)
  16. remix os显卡linux,Remix OS 系统 PC版下载和评测 | Remix OS是什么系统_什么值得买
  17. 快速上手飞桨PaddleClas图像分类库
  18. 【编辑器】unity自动化生成UI模板代码
  19. MATLAB语音端点检测
  20. RGBD三维重建——SeamlessTex运行环境配置(采坑指南)

热门文章

  1. 《C和指针》——字符数组和字符串常量的区别
  2. 【AI视野·今日CV 计算机视觉论文速览 第179期】Tue, 25 Feb 2020
  3. 【三维深度学习】多视角立体视觉模型R-MVSNet
  4. win8.1除了应用界面的应用,其他系统程序都不能上网,包括IE
  5. 【C++ STL学习之七】STL算法之find和find_if
  6. DataGridView控件的使用 1206 半草稿
  7. 生成随机数 java
  8. 第四天的作业与答案,py直播
  9. 爬虫-请求头处理模块
  10. 爬虫-36kr-接口分析-191016