二叉树排序
来源:互联网 发布:网络解锁助手1.09官网 编辑:程序博客网 时间:2024/06/06 20:39
1、二叉树排序
--1)一个无序整数数组
--2)创建二叉树,数组第一个元素为根结点,数组中下一个元素小于根的值放左边,大于的放右边。
--3)中序遍历,结果即为数组从小到大的排序。
当n较大时,用快速排序、堆排序或归并排序。
当待排序的关键字是随机分布时,快速排序的平均时间最短。堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。
堆排序和快速排序都是不稳定的。
若要求排序稳定,可选用归并排序。但从单个记录起进行两两归并的排序算法并不值得提倡。通常可以将它和直接插入排序结合在一起使用。
稳定排序:直接插入排序、冒泡排序、归并排序
不稳定:堆排序、快速排序、希尔排序、选择排序
2、代码实现
#include <iostream>using namespace std;#define dim(x) (sizeof(x)/sizeof(x[0]))void swap(int *x,int *y){int t = *x;*x = *y;*y = t;}//定义二叉树结构体struct NODE{int iData;NODE *pLChild;NODE *pRChild;};//中序遍历void InOrder(NODE *node){if(node == NULL) return;InOrder(node->pLChild);printf("%d ",node->iData);InOrder(node->pRChild);}//创建二叉树NODE * TreeSort(const int sz[],const int nLen){//先创建好所有结点NODE *tree = new NODE[nLen];for(int i=0;i<nLen;i++){tree[i].iData = sz[i];tree[i].pLChild = NULL;tree[i].pRChild = NULL;}//根据规则,建立结点间的关系NODE *pRoot = &tree[0]; //根结点选择数组第一个元素for(int i=1;i<nLen;i++){NODE *pCur = pRoot;bool bGo = true; //控制跳出循环的while(bGo){//判断新加入的结点是不是比当前节点小while(tree[i].iData <= pCur->iData){if(pCur->pLChild == NULL){pCur->pLChild = &tree[i];bGo = false;break;}pCur = pCur->pLChild;}//判断新加入的结点是不是比当前节点大while(tree[i].iData > pCur->iData){if(pCur->pRChild == NULL){pCur->pRChild = &tree[i];bGo = false;break;}pCur = pCur->pRChild;}}}return pRoot;}void main(){int a[] = {49,38,65,97,76,13,27};NODE *pRoot = TreeSort(a,dim(a));InOrder(pRoot);printf("\n");delete pRoot;system("pause");}
输出:
0 0
- 二叉树,排序二叉树
- 排序算法-二叉树排序
- 树-排序二叉树
- 二叉树排序
- 排序二叉树
- 使用二叉树排序
- 排序二叉树 原理
- 二叉树排序法
- 二叉树排序
- java-二叉树排序
- 二叉排序(查找)树
- 排序二叉树
- 二叉树排序
- 二叉树排序
- 二叉树排序算法
- 二叉排序(查找)树
- 二叉树排序原理
- 二叉树排序
- 进程
- float数据在内存中是怎么存储的
- 设置文件上传
- getActionBar()返回为空 空指针错误 Caused by: java.lang.NullPointerException
- 1053. Path of Equal Weight (30)
- 二叉树排序
- Android Studio加载第三方SDK的jar和so库(百度地图、JPush等)的方法
- .git 目录
- 爬虫示例程序
- webservie服务重启以及查看LOG档
- android shape设置背景风格为圆角
- 利用DNS Zone Transfers漏洞工具dnswalk
- 机器学习知识点(一)文本字符信息熵Java实现
- 关于os的一系列问题:计算当前文件夹下所有文件的大小