堆排序是一种树形选择排序方法,它的特点是:在排序的过程中,将array[0,...,n-1]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲节点和孩子结点之间的内在关系,在当前无序区中选择关键字最大(最小)的元素。1. 若array[0,...,n-1]表示一颗完全二叉树的顺序存储模式,.....
分类:
编程语言 时间:
2015-07-13 22:18:12
阅读次数:
217
1.算法介绍 堆排序是一种树形选择排序,是对直接选择排序的有效改进。 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]...
分类:
编程语言 时间:
2015-07-12 20:20:51
阅读次数:
161
二叉树的顺序存储结构就是用一维数组存储二叉树中的节点,并且节点的存储位置,也就是数组的下标要能体现节点之间的逻辑关系。—–>一般只用于完全二叉树
链式存储—–>二叉链表
定义: lchild | data | rchild(两个指针域,一个数据域)typedef struct Node {
ElemType data;
struct Node *lchild...
分类:
其他好文 时间:
2015-07-11 18:34:13
阅读次数:
158
题目:
Given a complete binary tree, count the number of nodes.
Definition of a complete binary tree from Wikipedia:
In a complete binary tree every level, except possibly the last, is completel...
分类:
编程语言 时间:
2015-07-09 22:42:58
阅读次数:
266
解法一:递归int countNodes(TreeNode* root){ if (root == NULL) return 0; TreeNode *pLeft = root->left; TreeNode *pRight = root->right; ...
分类:
其他好文 时间:
2015-07-09 17:55:25
阅读次数:
126
一、堆排序 (Heap ?sort) ? ? ?定义: 完全二叉树的非终端节点的值均不大于(不小于)子节点的值 ? ? ?存储结构: ?数组 | ?vector ? ? ?逻辑结构: ?完全二叉树 ? ? ?性质: ? ? ? ? ? ...
分类:
其他好文 时间:
2015-07-08 16:45:48
阅读次数:
121
思想:根据完全二叉树的定义,对完全二叉树按照从上到下、从左到右的层次遍历,应该满足一下两条要求:
●某节点没有左孩子,则一定无右孩子
●若某节点缺左或右孩子,则其所有后继一定无孩子
若不满足上述任何一条,均不为完全二叉树。
算法思路:采用层序遍历算法,用cm变量值表示迄今为止二叉树为完全二叉树(其初值为1,一旦发现不满足上述条件之一,则置cm为0),bj变量值表示迄今为止所有节点均...
分类:
编程语言 时间:
2015-07-08 02:07:38
阅读次数:
298
1,这道题如果纯用递归数点而不利用其为一个complete binary tree的话会超时。2.为了利用这个条件,比较左右两子数的高度:1, 如果相等则左子树为完全二叉树 2, 如果不等, 则右子树为完全二叉树。3,完全二叉树的node个数为pow(2,depth)-1, 因此可以不用递归数点节约...
分类:
其他好文 时间:
2015-07-07 07:01:22
阅读次数:
120
1,堆是什么? 堆的逻辑结构是一颗完全二叉树,但物理结构是顺序表(一维数组)。同时,此处的堆不要与JAVA内存分配中的堆内存混淆。这里讨论的是数据结构中的堆。 参考:计算机中的堆是什么? 2,数组实现堆的优势及特点 由于堆从逻辑上看是一颗完全二叉树,因此可以按照层序遍历的顺序将元素放入一维数组中。注...
分类:
其他好文 时间:
2015-07-05 18:32:32
阅读次数:
125
主要内容:1、什么是堆?2、如何建堆3、堆排序4、参考代码一、什么是堆?“堆”是个很有趣的数据结构,是个完全二叉树。“堆”的特性:每个节点的键值一定总是大于(或小于)它的父节点(大于:称为“最大堆”,小于:称为“最小堆”),或者说每个节点总是大于或小于它的子节点。对于最大堆而言,根节点为最大值;对于...
分类:
编程语言 时间:
2015-07-01 13:40:31
阅读次数:
161