堆是二叉树中的一种,是一种常见的数据结构,具有以下性质:任意节点小于(最小堆)或大于(最大堆)它的所有后裔,最小元或最大元在堆的根上(堆序性)。堆总是一棵完全二叉树 最大堆如图一,最小堆如图二。 最小堆的实现如下: MinHeap.h 1 #include "stdafx.h" 2...
分类:
其他好文 时间:
2014-09-30 18:57:49
阅读次数:
188
给你机会发出声音,但是不给你机会证明高层的决定是错的RT: 时间复杂度O(n) 空间复杂度O(1)原理就是有指针指向父节点和当前的节点,左孩子必指向右孩子,右孩子必指向父节点的下一个节点的左孩子void Solution::yahooTree(TreeNode *root){ if (root...
分类:
其他好文 时间:
2014-09-28 15:36:12
阅读次数:
201
完全二叉树:一棵具有N个节点的二叉树的结构与满二叉树的前N个节点的结构相同
如何判断一个树是完全二叉树
可以使用层序遍历,只需2个步骤
第一步:如果遍历到一个节点只有右子树没有左子树,则不是完全二叉树
第二部:如果遍历到一个节点只有左子树,那么后面遍历到的节点必须是叶子节点,否则也不是完全二叉树
排除以上两种情况,则树是完全二叉树
核心代码:
//层序遍历
int L...
分类:
其他好文 时间:
2014-09-27 21:59:03
阅读次数:
401
胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。
不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。
胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值改变后,利用中间结点的信息,还是能够快速地找到最值。在k路归并排序中经常用到。...
分类:
其他好文 时间:
2014-09-25 23:56:08
阅读次数:
279
小猴子下落
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述
有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关...
分类:
其他好文 时间:
2014-09-21 20:05:01
阅读次数:
196
//////最小堆排序,把所有的排序元素放在数组中。构成一个完全二叉树。///publicclassMyHeapSort{//////创建最小堆////////////publicvoidCreateHeap(Listlist,intlow,inthigh){inttemp=0;intk=0;//从...
分类:
其他好文 时间:
2014-09-19 19:05:55
阅读次数:
220
常见的堆实现为二叉堆(Binary Heap),其实际上是一颗二叉树(Binary Tree),并且是一颗完全二叉树(Complete Binary Tree)。当堆被实现为完全二叉树时,其高度为最小高度。如果堆中有 n 个节点,则最小高度为 Θ(lg n)。
分类:
其他好文 时间:
2014-09-17 20:17:52
阅读次数:
352
树是一种非线性的数据结构,树有根节点,子树等概念。
二叉树(Binary Tree):每个节点最多有两颗子树,并且子树有左右之分。
概念:树的深度,满二叉树,完全二叉树,树的节点树
二叉树包括顺序存储和链式存储,这里只说链式存储。二叉树的每个节点和双链表有些类似,但是树的结构要比双链表复杂,在构造树的过程中涉及到递归调用的问题,递归的问题往往是很复杂的问题,因此,这里单独说二叉树的构建。
...
分类:
其他好文 时间:
2014-09-15 19:36:19
阅读次数:
142
堆排序
堆,heap,是二叉树的一种。小根堆有这样的性质——任意一个结点的值比它的左右孩子都要小。
排序思想
将待排元素看作是完全二叉树,物理上用一维数组存储。
实现堆排序需要解决两个问题:
1.如何将杂乱的完全二叉树初始化为一个堆?
答:从最后一个非叶结点起,将该节点当做根,自上而下进行调整,使之成为一个堆。然后依次对倒数第二个、倒数第三个、直至正数第一个结点进行此操作。
2.输出...
分类:
其他好文 时间:
2014-09-09 12:59:48
阅读次数:
165