堆是一种特殊的完全二叉树,其特点是所有父节点都比子节点要小,或者所有父节点都比字节点要大。前一种称为最小堆,后一种称为最大堆。 比如下面这两个: 那么这个特性有什么作用?既然题目是堆排序,那么肯定能用来排序。想要用堆排序首先要创建一个堆,如果对4 3 6 2 7 1 5这七个数字做从小到大排序,需要 ...
分类:
编程语言 时间:
2017-05-10 17:54:30
阅读次数:
257
树 下图是一“棵”树的样子。树这个名称起的很形象,整个数据结构由根、枝、叶组成,其中1为根节点,2、3是1的子节点,4、5、6、8、9、10这几个没有子节点的节点称为叶节点。 节点的度:一个节点的子树的数量称为该节点的度。例如,图中节点2的度为3,节点3的度为2。 树的度:一棵树的度是指该树中节点的 ...
分类:
编程语言 时间:
2017-05-10 17:51:27
阅读次数:
280
二叉树的定义 1)每个节点最多只有两颗子树,即二叉树中结点的度只能为0、1、2; 2)子树有左右之分,不能颠倒。 二叉树的五种基本状态: 1)空二叉树 2)只有根节点 3)只有左子树,右子树为空 4)只有右子树,左子树为空 5)既有左子树,又有右子树 满二叉树: 所有的分支结点都有左孩子和右孩子结点 ...
分类:
其他好文 时间:
2017-04-24 14:09:42
阅读次数:
153
题目链接:http://acm.hzau.edu.cn/problem.php?id=1203 【题意】给你一颗完全二叉树每个节点都有一个权值,然后要你从上往下找一条链,值得链上权值的和<K,且节点数最大。 【分析】有两种做法:一种是在树上双指针,另一种是先求一下前缀和,当到i节点时前缀和<K,更新 ...
分类:
其他好文 时间:
2017-04-24 00:05:09
阅读次数:
356
思想:根据完全二叉树的定义,对完全二叉树按照从上到下、从左到右的层次遍历,应该满足一下两条要求: ●某节点没有左孩子,则一定无右孩子 ●若某节点缺左或右孩子,则其所有后继一定无孩子 若不满足上述任何一条,均不为完全二叉树。 ...
分类:
编程语言 时间:
2017-04-23 13:16:36
阅读次数:
166
堆排序 1.堆排序是一种树形选择排序,在排序过程中,将待排序的记录r[1..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树的双亲结点和孩子结点之间的内在关系,在当前无序的序列中选择关键字最大(或者最小的)记录 1.1、先将无序队列,列成二叉树的的样子 1.2、建初堆。从n/2向上取整处开始调 ...
分类:
编程语言 时间:
2017-04-22 17:34:51
阅读次数:
297
1.一般有2i个节点在第i+1层上,满足这个条件的树称作是完全二叉树。 2.对于所有的非空二叉树,如果它的中间节点都恰好有两个非空子女,那么叶的数目m大于中间节点的数目k,并且m=k+1。 证明:1??如果一个树仅有一个根,那么很容易验证上述条件。假如他对某个树成立,就将两个树连接到一个已存在的树叶 ...
分类:
编程语言 时间:
2017-04-22 00:23:50
阅读次数:
224
1.二叉树第i层至多有2^(i-1)个结点(i>=1)。 2.深度为k的二叉树上,至多含2^k-1个结点(k>=1) 3.n0 = n2 + 1(度) 4.满二叉树:深度为k且含有2^k-1个结点的树。 5.完全二叉树:除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点。 ...
分类:
其他好文 时间:
2017-04-17 18:07:03
阅读次数:
168
1. 最大(小)堆 对于一个完全二叉树来说,如果所有的结点(叶子结点除外)的值都大于(小于)其左右孩子结点的值,那么这个完全二叉树就被成为一个大(小)根堆。如下图所示。按照堆的定义可以发现,堆顶结点(二叉树的根结点)一定对应整个序列中的最大(小)记录。这样一来,可以设计一种排序思路,每次将堆的堆顶记 ...
分类:
编程语言 时间:
2017-04-13 23:25:04
阅读次数:
231
堆简介 堆并不是STL的组件,但是经常充当着底层实现结构。比如优先级队列(Priority Queue)等等。 堆是一种完全二叉树,因此我们可以用数组来存储所有节点。在这里的实现中,采用了一个技巧:将数组中索引为0的元素保留,设置为极大值或者为极小值(依据大顶堆或者小顶堆而定)。那么当某个节点的索引 ...
分类:
编程语言 时间:
2017-04-09 18:02:30
阅读次数:
225