链表、栈或队列都是线性结构,包含一个数据元素序列。而二叉树是一种层次结构。一颗二叉树要么为空,要么由一个数据元素(称为跟)和两颗独立的二叉树(称为左子树和右子树)。某个节点的左(右)子树的根节点称为该节点的左(右)孩子节点。两颗子树均为空的节点称为叶子节点。
搜索二叉树:其左子树任意节点的值都小于此节点的值,其右子树中任意节点的值都大于此节点的值。
完全二叉树:如果一颗二叉树除最后一层外都保证...
分类:
其他好文 时间:
2015-08-27 13:25:52
阅读次数:
201
堆排序的思想堆排序的具体算法,思想是每次取出堆的最顶层根节点,即数组下标为0,然后与最后一个节点即i+1交换。
参考地址建堆过程:
首先将原始队列构建成完全二叉树
然后从第一个非叶子节点开始,比较当前节点和其孩子节点,将最大的元素放在当前节点,交换当前节点和最大节点元素。
注意:如果根节点是a[0],那么第一个非叶子节点就是倒数第二层的最后一个根节点,下标为length/2-1
将当前元素前面所...
分类:
编程语言 时间:
2015-08-26 15:48:18
阅读次数:
143
二叉树及存储结构二叉树的定义:一个有穷的结点集合。若不为空,则它是由根节点和称为其左子树和右子树的两个不想交的二叉树组成一般的左右的树是没有左右之分的。二叉树有左右之分。三种特殊的二叉树斜二叉树 实质就可以是链表了。完美二叉树完全二叉树二叉树的几个重要的性质 二叉树的抽象数据类型对二叉树来...
分类:
其他好文 时间:
2015-08-25 14:11:37
阅读次数:
175
满二叉树:节点数为2的指数次个数的二叉树完全二叉树:节点与满二叉树一一对应的二叉树。满二叉树是完全二叉树的一种。树的遍历:前序遍历、中序遍历、后序遍历,它们访问节点的顺序不同。1前序 :访问节点、左孩子,右孩子2中序 :左孩子,访问节点,右孩子3后序 :左孩子,右孩子,访问节点由遍历序号确定二叉树:...
分类:
其他好文 时间:
2015-08-21 21:14:55
阅读次数:
192
在数据结构中,堆其实就是一棵完全二叉树。我们知道内存中也有一块叫做堆的存储区域,但是这与数据结构中的堆是完全不同的概念。在数据结构中,堆分为大根堆和小根堆,大根堆就是根结点的关键字大于等于任一个子节点的关键字,而它的左右子树又分别都是大根堆;小根堆与大根堆恰好相反。在C++的STL中优先队列pr.....
分类:
编程语言 时间:
2015-08-20 22:13:28
阅读次数:
215
二叉树的基本概念
关于二叉树有一点需要注意:二叉树并不是树的一种特殊形式,二叉树时有序树。
二叉树又有几种特殊的形式:最优二叉树(哈弗曼树)、二叉排序树(二叉查找树)、二叉堆。
哈弗曼树的特点就是带权路径长度最小,因此还叫最优二叉树。另外,哈弗曼树是完全二叉树。
二叉排序树它或者是一棵空树;或者是具有下列性质的二叉树:
1,若左子树不空,则左子树上所有结点的...
分类:
其他好文 时间:
2015-08-20 19:04:30
阅读次数:
130
1、 堆排序的思想 输入一个数组,利用一组二叉树的操作使其变成有序的数组,就是堆排序 堆排序利用的是二叉树的思想,操作对象是数组,所以数组需要在逻辑上映射到二叉树上,由于数组的下标是连续的,而二叉树中只有完全二叉树和满二叉树是连续的,所以将数组元素逐个映射到完全二叉树上,然后配备一系列的操作即可.....
分类:
编程语言 时间:
2015-08-19 22:56:57
阅读次数:
231
源代码如下:
/*
一棵二次幂堆是一棵左有序的堆,由右子树为空左子树为完全二叉树构成的根组成
二项队列:是二次幂堆的一个集合。 其中不存在相等大小的堆。其结构由队列节点数目确定
对应整数的二进制表示。
*/
#include
#include
#define maxBQsize 40
typedef struct PQnode* PQlink;
typedef struc...
分类:
其他好文 时间:
2015-08-18 14:19:18
阅读次数:
111
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=...
分类:
编程语言 时间:
2015-08-17 23:19:40
阅读次数:
174
源代码如下
#include
#include
typedef struct Item *node;
struct Item{
int data;
char c;
};
static Item *pq;
static int N ;
void swap(Item &a,Item &b){struct Item t = a;a = b;b = t;}
//自底向上堆化 完全二叉树 ...
分类:
其他好文 时间:
2015-08-17 19:42:34
阅读次数:
93