数据结构和算法15 之二叉树排序
2016-04-19 19:38
344 查看
本文为博主原创文章,转载请注明出处:/article/7552641.html
顾名思义,二叉树排序就是利用二叉搜索树的特点进行排序,前面提到过二叉搜索树的特点是,左子节点比自己小,右子节点比自己大,那么二叉树排序的思想就是先将待排序序列逐个添加到二叉搜索树中去,再通过中序遍历二叉搜索树就可以将数据从小到大取出来。如果对二叉树还不太了解,请看这篇博文:数据结构和算法之二叉树
,这里不再赘述。
下面我们来看看二叉树排序的实现:
算法分析:二叉树的插入时间复杂度为O(logN),所以二叉树排序算法的时间复杂度为O(NlogN),但是二叉树排序跟归并排序一样,也需要额外的和待排序序列大小相同的存储空间。空间复杂度为O(N)。
_____________________________________________________________________________________________________________________________________________________
-----乐于分享,共同进步!
-----更多文章请看:http://blog.csdn.net/eson_15
顾名思义,二叉树排序就是利用二叉搜索树的特点进行排序,前面提到过二叉搜索树的特点是,左子节点比自己小,右子节点比自己大,那么二叉树排序的思想就是先将待排序序列逐个添加到二叉搜索树中去,再通过中序遍历二叉搜索树就可以将数据从小到大取出来。如果对二叉树还不太了解,请看这篇博文:数据结构和算法之二叉树
,这里不再赘述。
下面我们来看看二叉树排序的实现:
public class Tree2Sort { private Node root; public Tree2Sort() { root = null; } public Node getRoot() { return root; } public void insertSort(int[] source) { for(int i = 0; i < source.length; i++) { int value = source[i]; Node node = new Node(value); if(root == null) { root = node; } else { Node current = root; Node parent; boolean insertedOK = false; while(!insertedOK) { parent = current; if(value < current.value) { current = current.leftChild; if(current == null) { parent.leftChild = node; insertedOK = true; } } else { current = current.rightChild; if(current == null) { parent.rightChild = node; insertedOK = true; } } } } } } //中序遍历 public void inOrder(Node current) { if(current != null) { inOrder(current.leftChild); System.out.print(current.value + " "); inOrder(current.rightChild); } } } class Node { public int value; Node leftChild; Node rightChild; public Node(int val) { value = val; } }
算法分析:二叉树的插入时间复杂度为O(logN),所以二叉树排序算法的时间复杂度为O(NlogN),但是二叉树排序跟归并排序一样,也需要额外的和待排序序列大小相同的存储空间。空间复杂度为O(N)。
_____________________________________________________________________________________________________________________________________________________
-----乐于分享,共同进步!
-----更多文章请看:http://blog.csdn.net/eson_15
相关文章推荐
- 关于在牛客网上做题的解析之数据结构(每日20道题,记录错误和不懂的题)
- 广义表(非线性结构)
- 数据结构概念解析之—空间复杂度
- 数据结构和算法14 之归并排序
- 数据结构概念解析之—时间复杂度
- 【数据结构】ArrayList原理及实现学习总结
- HashTable与多条件筛选
- 数据结构-广义表
- 数据结构,堆的学习
- 浙江大学MooC数据结构OJ——线性结构
- 冒泡排序的另一种写法
- java 常见数据结构(Array)
- 数据结构和算法设计专题之---二分查找(Java版)
- 数据结构和算法设计专题之---八大内部排序
- 算法Sedgewick第四版-第1章基础-009一链表与数组的比较及其他数据结构
- 【数据结构与算法】线段树篇二
- JAVA数据结构-LinkedList,ArrayList,Tree,
- JAVA数据结构-LinkedList,ArrayList,Tree,
- HDU 5371 Manacher
- 数据结构--双向循环链表C实现