堆堆的基本性质堆也可以说是一个完全二叉树,就是除了最底层的,其它层是满的,既然我们可以用完全二叉树来表示一个堆,那么我们这里就采用数组结构的二叉树来阐述堆的性质。
假设在这里我们用数组A表示堆,A[i]表示堆里面的第i个元素,于是我们通过二叉树的性质可知:
- PARENT(i) = i/2
- LEFTCHILD(i) = 2*i
- RIGHTCHILD(i) = 2*i+1就如下图表现...
分类:
其他好文 时间:
2015-05-05 22:03:55
阅读次数:
250
一.堆的介绍
堆有如下特点的二叉树:
1.他是完全的二叉树。也就是说,除了树的最后一层布需要时满的,其他的每一层从左到右都是满的.(如下图的完全二叉树跟不完全二叉树)
2.它常常用一个数组在实现。(如下图显示了堆它与数组之间的关系。堆在存储器中的表示是数组;堆只是概念上的表示。注意树是完全二叉树,...
分类:
编程语言 时间:
2015-05-05 21:46:49
阅读次数:
195
/*
* 时间:2015年5月4日09:58:21
* 目的:实现二叉树的先序遍历递归。
* 总结和思考!二叉树一般使用链式存储结构
* 如果使用顺序存储方式,除非二叉树是完全二叉树或者满二叉树
* 否则会浪费很多内存空间!
*/
# include
typedef struct Node{
char data; //数据元素
Node *LChild; //左孩子节点
...
分类:
其他好文 时间:
2015-05-04 12:02:43
阅读次数:
379
顺序存储结构二叉树存储结构的类型定义:#define MAX_SIZE 100
typedef telemtype sqbitree[MAX_SIZE];用一组地址连续的存储单元依次“自上而下、自左至右”存储完全二叉树的数据元素。
对于完全二叉树上编号为i的结点元素存储在一维数组的下标值为i-1的分量中,如图6-6(c)所示。
对于一般的二叉树,将其每个结点与完全二叉树上的结...
分类:
其他好文 时间:
2015-04-30 10:44:48
阅读次数:
133
堆就是一个完全二叉树,堆要求是指 该节点大于它的两个子节点。而两个字节点大小不一定。堆排序的最坏时间复杂度为nlog(n),平均也为nlog(n),占用空间为o(1),是一种比较排序算法。堆排序也可以用于找最大的k个数。时间复杂度为klog(n),因为建堆后,每次循环实际上都生成一个最大数。下面见代...
分类:
编程语言 时间:
2015-04-28 11:16:36
阅读次数:
161
深度优先和广度优先遍历在树和图中应用最为普遍,思想也类似,因此放到一起来总结。二叉树的深度优先广度优先遍历:一棵二叉树(2,(2(3,4),3(4,5))),这是一棵满二叉树,一共有7个节点,根节点2,深度为3数据结构定义如下:class Node: def __init__(self, value...
分类:
其他好文 时间:
2015-04-27 21:18:28
阅读次数:
129
开始的地方先放上关于二叉树的定义二叉树:是n(n>=0)个结点的有限集合,它或者是空树(n=0),或者是由一个根结点及两颗互不相交的、分别称为左子树和右子树的二叉树所组成。满二叉树:一颗深度为k且有2^k-1个结点的二叉树称为满二叉树。除叶子结点外的所有结点均有两个子结点。节点数达到最大值。所有叶子...
分类:
其他好文 时间:
2015-04-27 19:40:27
阅读次数:
130
转自:http://blog.csdn.net/sqx2011/article/details/8241734胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。 不同的是,胜者树的中间结点记录的是胜者的标号;而败者树...
分类:
编程语言 时间:
2015-04-25 13:26:08
阅读次数:
390
/*
* 堆的性质(最小堆为例):
* 0.根节点为最小值
* 1.堆可以看做是一个完全二叉树(即孩子节点从左向右排列)
* 2.堆的高度lgn/lg2(n为节点的数目)
* 3.第i节点的左孩子节点是2*i+1,右孩子节点为2*i+2
* 4.以任意一个节点作为根节点,那么该节点都是堆
* 5.可以用一个数据来表示堆
*/
/*
* 构建堆的原理:
* 上滤
* 在最后一个节点后建立一个空节点...
分类:
编程语言 时间:
2015-04-23 21:47:50
阅读次数:
182
堆排算是排序算法中比较难的一个算法,在实现编码之前首先要对堆排的思想有一个清晰的思路,下面我们就来分析一下堆排序。
1.首先要明白堆排序第一步要有堆,也就是完全二叉树,那么问题来了,如何创建一个完全二叉树呢?完全二叉树是需要按层来创建的,如果你曾经编写过按层遍历二叉树这块会很好理解,按层的话要记录上一个结点,所以要用到 队列,创建的节点依次入队。
2.创建好完全二叉树,堆排...
分类:
编程语言 时间:
2015-04-21 09:56:25
阅读次数:
165