二叉树排序

原创 2017年01月03日 16:05:57

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");
}

输出:

版权声明:本文为博主原创文章,未经博主允许不得转载。

排序二叉树

  • 2015年06月23日 01:08
  • 3KB
  • 下载

排序二叉树的建立注意重复元素

think: 1建立排序二叉树时 注意重复元素 sdut原题链接 树结构练习——排序二叉树的中序遍历 Time Limit: 1000MS Memory Limit: 65536KBProbl...

二叉树排序

  • 2014年04月20日 11:07
  • 1KB
  • 下载

排序二叉树完整代码

  • 2014年03月01日 11:29
  • 6KB
  • 下载

第十三周项目二C/C++二叉树排序树中查找的路径

/* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:.cpp *完成日期:2017年11月30日 ...

排序二叉树算法

  • 2011年12月18日 21:43
  • 17KB
  • 下载

数据结构——线索二叉树排序

  • 2010年07月16日 23:27
  • 937B
  • 下载

树结构练习——排序二叉树的中序遍历

树结构练习——排序二叉树的中序遍历 题目描述 在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在...

删除排序二叉树的一个节点

  • 2012年05月26日 18:18
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树排序
举报原因:
原因补充:

(最多只允许输入30个字)