二叉数二叉树是一棵特殊的树,二叉树每个节点最多有两个孩子结点,分别称为左孩子和右孩子。满二叉树:高度为N的满二叉树有2^N-1个节点的二叉树。完全二叉树:若设二叉树的深度为h,除第h层外,其它各层(1~h-1)的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就..
分类:
其他好文 时间:
2016-04-22 01:18:41
阅读次数:
189
堆 用数组存储一个堆,看成一个近似的完全二叉树。堆有自己的尺寸(不一定与数组长度相同)。 堆的性质:父结点比儿子结点大是最大堆;父节点比儿子节点小是最小堆。 本文以最大堆为例。 对于一个结点i,其父结点标号是i/2向下取整,左子结点是2*i,右子结点是2*i+1。 堆的高度是log(n)。 堆排序的 ...
分类:
编程语言 时间:
2016-04-18 17:13:58
阅读次数:
378
1、堆的定义
堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:
Key[i]<=key[2i+1]&&Key[i]=Key[2i+1]&&key>=key[2i+2]。在最大堆中,最大元素放在根节点中,且对任一非根节点,它的值小于或等于其双亲节点值。最小对则相反,根节点是最小元素。2、堆排序的思想
利用最大堆(最小堆)堆顶记录的是最大关键字(最小...
分类:
编程语言 时间:
2016-04-18 13:46:30
阅读次数:
164
完全二叉树 只有最下层的两层节点度小于2,并且最下面一层的节点都集中在该层最左边的若干位置的二叉树 称为完全二叉树 满二叉树 除了叶节点外每一层的节点都有左右子节点,叶子节点都在最底层的二叉树 ...
分类:
其他好文 时间:
2016-04-16 21:27:47
阅读次数:
122
图解堆排序 摘要: 作为选择排序的改进版,堆排序可以把每一趟元素的比较结果保存下来,以便我们在选择最小/大元素时对已经比较过的元素做出相应的调整。 堆排序是一种树形选择排序,在排序过程中可以把元素看成是一颗完全二叉树,每个节点都大(小)于它的两个子节点,当每个节点都大于等于它的两个子节点时,就称为大 ...
分类:
编程语言 时间:
2016-04-11 13:59:22
阅读次数:
325
堆排序是一种原地排序排序算法,不使用额外的数组空间,运行时间为O(nlgn)。本篇文章我们来介绍一下堆排序的实现过程。
要了解堆排序,我们首先来了解一个概念,完全二叉树。堆是一种完全二叉树或者近似完全二叉树。什么是完全二叉树呢?百度百科上给出定义:完全二叉树:除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点。下面用两个小图来说明完全二叉树与非完全二叉树。(图片来自百度...
分类:
编程语言 时间:
2016-04-10 11:34:35
阅读次数:
294
因为有$10^5$个宗教,需要开$10^5$个线段树。 平时开的线段树是“满”二叉树,但在这个题中代表一个宗教的线段树管辖的区间有很多点都不属于这个宗教,也就不用“把枝叶伸到这个点上”,所以这样用类似主席树的数组动态开点来建立$10^5$个只有几个“树枝”的线段树,维护轻重链就可以了 线段树的$L, ...
分类:
其他好文 时间:
2016-04-04 16:26:30
阅读次数:
194
传送门:https://uva.onlinejudge.org/external/6/p679.pdf 题意:在一颗结点带开关的完全二叉树上扔球,初始时开关为关闭状态,树的深度为D(1 <= D <= 20), 根结点为1(节点从1开始到2D-1),开关为关闭向左子结点走,否则往右子结点走,每到一个 ...
分类:
其他好文 时间:
2016-03-30 01:32:49
阅读次数:
139
刚开始只发现了中序遍历是从小到大顺序的。一直在找完全二叉树的层结点间规律。。。放弃了 不曾想,完全二叉树的规律早就知道啊。根结点为i,其左孩子结点2*i, 右孩子结点2*i+1。 结合此两者即可解决问题! A Binary Search Tree (BST) is recursively defin ...
分类:
其他好文 时间:
2016-03-26 17:07:30
阅读次数:
142
堆排序的要点在于构建一个最大推或者最小堆。那么什么是最大堆、最小堆呢?
概念介绍
二叉堆:二叉堆是一棵完全二叉树
二叉堆的性质:
1、二叉堆的父节点的键值总是大于或者等于(小于或者等于)子节点的键值
2、当父节点的键值大于或者等于子节点的键值时为最大堆,当父节点的键值小于或者等于子节点时时最小堆
3、通常对于给定的结点i可以根据在数组中的位置求出其父节点的位置、左右子节点的位置,对于下...
分类:
编程语言 时间:
2016-03-26 07:47:01
阅读次数:
147