堆排序是一种树形选择排序,是对直接选择排序的有效改进。 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最小项(小顶堆)。 若以一维数组存储一个堆,则堆对应一棵完全二叉树,且所有非叶结点的值均不大于(
分类:
编程语言 时间:
2016-03-18 21:36:13
阅读次数:
200
为二叉树的节点都添加一个next指针,指向跟它在同一高度的右边的节点,如果右边没有节点,就指向None。与 Populating Next Right Pointers in Each Node 的区别就是这里的二叉树可以是不完全二叉树。...
分类:
其他好文 时间:
2016-03-16 15:30:00
阅读次数:
194
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。 二叉堆是完全二叉树或者是近似完全二叉树。 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。 2.每个结点的左子树和右子树都是一
分类:
编程语言 时间:
2016-03-16 09:37:11
阅读次数:
239
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2 解题报告: 这里的深搜有一点不同,就是,在深搜每一个点时,都要深搜每一个点,就是一个完全二叉树。 借鉴:http://blog.csdn.net/zxy_snow/ar
分类:
Web程序 时间:
2016-03-08 19:28:48
阅读次数:
137
二叉树:二叉树是一棵特殊的树,二叉树每个节点最多有两个孩子结点,分别称为左孩子和右孩子。满二叉树:高度为N的满二叉树有2^N-1个节点的二叉树。完全二叉树:若设二叉树的深度为h,除第h层外,其它各层(1~h-1)的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这..
分类:
其他好文 时间:
2016-03-06 17:42:27
阅读次数:
215
/* 标题:锦标赛 如果要在n个数据中挑选出第一大和第二大的数据 (要求输出数据所在位置和值) 使用什么方法比较的次数最少? 我们可以从体育锦标赛中受到启发。 8个选手的锦标赛,先两两捉对比拼,淘汰一半。 优胜者再两两比拼...直到决出第一名。 第一名输出后,只要对黄色标示的位置重新比赛即可。 下面
分类:
其他好文 时间:
2016-03-05 23:25:50
阅读次数:
265
定义:左式堆(Leftist Heaps)又称作最左堆、左倾堆,是计算机语言中较为常用的一个数据结构。左式堆作为堆的一种,保留了堆的一些属性。第1,左式堆仍然以二叉树的形式构建;第2,左式堆的任意结点的值比其子树任意结点值均小(最小堆的特性)。但和一般的二叉堆不同,左式堆不再是一棵完全二叉树(Com
分类:
其他好文 时间:
2016-03-04 22:43:17
阅读次数:
1484
由于是完全二叉树,所以我们可以预先知道整棵树的形状,因此可以判断根节点的两个子节点哪个是满二叉树,哪个不是满二叉树(必然是一边满,一边不满),对于满的子节点,我们可以直接求出它的不同子树的个数,也就是说我们只要递归搜不满的子节点就行了,这样一来,我们的复杂度就只有logn了。 当然还要解决相同子树判
分类:
其他好文 时间:
2016-03-04 01:55:14
阅读次数:
168
解法一,排序 先从大到小快排,然后扫前K个返回 时间复杂度:O(NlogN),空间复杂度O(1) 解法二,优先队列 前K个放入优先队列中,与最小堆顶元素比较大小,若大于则删除堆顶并插入;否则跳过 时间复杂度:O(NlogK),空间复杂度O(K) 解法三,堆调整 先将数组直接用完全二叉树存储,复杂度O
分类:
编程语言 时间:
2016-03-03 22:54:38
阅读次数:
258
二叉树特点
每个节点最多有两棵子树;
二叉树是有序的,即区分左右子树的次序。
完全二叉树
叶子节点只能出现在最下两层,且最下层的叶子节点都集中在二叉树左侧连续的位置。
如果有度为1的节点,只可能有一个,且该节点只有左孩子。
二叉树实现
这里只讲二叉链表实现,使用C++。
templateclass DataType>
struct BiNode
{
DataTy...
分类:
编程语言 时间:
2016-02-25 01:42:09
阅读次数:
265