数据结构和算法15 之二叉树排序

简介:

 顾名思义,二叉树排序就是利用二叉搜索树的特点进行排序,前面提到过二叉搜索树的特点是,左子节点比自己小,右子节点比自己大,那么二叉树排序的思想就是先将待排序序列逐个添加到二叉搜索树中去,再通过中序遍历二叉搜索树就可以将数据从小到大取出来。如果对二叉树还不太了解,请看这篇博文:数据结构算法之二叉树 ,这里不再赘述。

下面我们来看看二叉树排序的实现:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Tree2Sort {  
  2.     private Node root;  
  3.     public Tree2Sort() {  
  4.         root = null;  
  5.     }  
  6.     public Node getRoot() {  
  7.         return root;  
  8.     }  
  9.     public void insertSort(int[] source) {  
  10.         for(int i = 0; i < source.length; i++) {  
  11.             int value = source[i];  
  12.             Node node = new Node(value);  
  13.             if(root == null) {  
  14.                 root = node;  
  15.             }  
  16.             else {  
  17.                 Node current = root;  
  18.                 Node parent;  
  19.                 boolean insertedOK = false;  
  20.                 while(!insertedOK) {  
  21.                     parent = current;  
  22.                     if(value < current.value) {  
  23.                         current = current.leftChild;  
  24.                         if(current == null) {  
  25.                             parent.leftChild = node;  
  26.                             insertedOK = true;  
  27.                         }  
  28.                     }  
  29.                     else {  
  30.                         current = current.rightChild;  
  31.                         if(current == null) {  
  32.                             parent.rightChild = node;  
  33.                             insertedOK = true;  
  34.                         }  
  35.                     }  
  36.                 }  
  37.                   
  38.             }  
  39.         }  
  40.     }  
  41.     //中序遍历  
  42.     public void inOrder(Node current) {  
  43.         if(current != null) {  
  44.             inOrder(current.leftChild);  
  45.             System.out.print(current.value + " ");  
  46.             inOrder(current.rightChild);  
  47.         }  
  48.     }  
  49. }  
  50. class Node {  
  51.     public int value;  
  52.     Node leftChild;  
  53.     Node rightChild;  
  54.     public Node(int val) {  
  55.         value = val;  
  56.     }  
  57. }  

        算法分析:二叉树的插入时间复杂度为O(logN),所以二叉树排序算法的时间复杂度为O(NlogN),但是二叉树排序跟归并排序一样,也需要额外的和待排序序列大小相同的存储空间。空间复杂度为O(N)。


转载:http://blog.csdn.net/eson_15/article/details/51193330

目录
相关文章
|
12月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
452 5
|
12月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
541 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
383 1
|
12月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
379 0
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
306 0
|
机器学习/深度学习 算法 安全
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
220 0
|
12月前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
504 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
12月前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
467 1
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
625 3
|
12月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
239 0

热门文章

最新文章