完全二叉树——若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。解题思路:满二叉树有一个性质是节点数等于2^h-1(h为高度),所以可以这样判断节点的左右高度是不是一样,如果是一样说明是满二叉树,就可以用...
分类:
编程语言 时间:
2015-09-07 22:37:44
阅读次数:
178
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=...
分类:
编程语言 时间:
2015-09-06 22:48:21
阅读次数:
275
线段树基本概念线段树/区间树是一种非常常用的对区间数据进行操作的数据结构。线段树是一棵二叉树(但不一定是完全二叉树!),它的每个节点均代表一个区间,且父节点代表的区间为左右子节点代表的区间之和。特别的,根节点代表的区间为所有节点代表区间之和,各个叶节点代表区间为单个点(即长度为1的区间)。线段树结构...
分类:
其他好文 时间:
2015-09-06 19:59:17
阅读次数:
154
一、堆的概念: 堆是一种数据结构,是一棵像这样的完全二叉树,其任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]=0;i--) { maxHe...
分类:
编程语言 时间:
2015-09-05 23:34:57
阅读次数:
206
Priority Queues9.1 ADT9.2 implementing a priority queue用无序的list来实现用有序的列表来实现优先队列9.3 heapsheap数据结构使用堆来实现优先队列基于数组实现的完全二叉树使用最小优先队列来进行排序adaptable priority ...
分类:
编程语言 时间:
2015-09-01 20:05:19
阅读次数:
278
一、概念堆排序是利用堆这种数据结构的性质设计的一种排序方式。堆是一个近似完全二叉树的结构,并满足性质:子节点的键值或则索引值总是小于等于(或则大于等于)父节点的。是不稳定排序。二、原理1.首先将待排序的数组进行堆化,构建成堆结构2.将堆首和堆尾进行交换3.将堆大小..
分类:
编程语言 时间:
2015-09-01 00:04:12
阅读次数:
265
1.最容易想到的方法:递归遍历每个点,计算出总的点数,时间复杂度O(n),很不幸,超时了。(不超也说不过去啊==)
class Solution {
public:
int countNodes(TreeNode* root) {
if(root==NULL)
return 0;
int res=0;
if(root->le...
分类:
其他好文 时间:
2015-08-31 21:41:58
阅读次数:
129
两段比较实用的代码,一个用于根据输入的数组构建一棵完全二叉树,一个用于在控制台打印二叉树,方便查看树的结构(打印二叉树的代码是在网上找的,现在找不到出处了,向作者抱歉)。//首先是节点的结构struct TreeNode { int val; struct TreeNode *left;...
分类:
其他好文 时间:
2015-08-29 18:25:50
阅读次数:
172
Complete Binary Search Tree 完全 二叉 搜索数题意理解二叉搜索数 左小右大完全二叉树 结构规律完全二叉搜索数到底用什么数据结构来表示这个树呢?链表还是数组。1、由于是完全二叉树,所以我们能准确的算出来左子树有多少个结点。 完全二叉树+n个树 -> 左子树...
分类:
其他好文 时间:
2015-08-27 22:37:43
阅读次数:
240
堆是一种非常有用的数据结构,可用来设计高效的排序算法和优先队列。一个堆是一颗具有如下性质的二叉树:1)它是一颗完全二叉树;2)每个节点都大于等于其任何子节点。
如上图是一个最大堆,我们可以用数组来描述它。根节点在数组位置0,两个孩子在位置1和2。对于位于位置i的节点,其左孩子在2i+1,其右孩子在2i+2,其父节点在(i-1)/2。利用堆进行排序,是堆一个很重要的用途。下面是堆排序的代码...
分类:
编程语言 时间:
2015-08-27 18:52:16
阅读次数:
145