二叉树:每个节点最多有两个子树; 满二叉树:除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树。 所有内部节点都有两个子节点,最底一层是叶子节点。 性质: 1) 如果一颗树深度为h,最大层数为k,且深度与最大层数相同,即k=h; 2) 它的叶子数是: 2^(h-1) 3) 第k层的结点数 ...
分类:
其他好文 时间:
2018-08-07 00:35:49
阅读次数:
144
堆排复习: 结论:堆排算法时间复杂度为O(nlgn),额外空间复杂度为O(1); 在开始堆排序过程之前先要熟悉两个结构 1,完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(摘自百度百科) ...
分类:
编程语言 时间:
2018-08-06 00:40:26
阅读次数:
140
【emmm】 堆其实就是一个完全二叉树:叶子节点都在最后两层且集中在左侧。大(小)根堆的定义就是:每一个节点的权值大于等于(小于等于)其左右儿子(若存在)。 支持的操作有: 插入 删除(根节点或者非根节点) 查询根的权值 【代码】 ...
分类:
其他好文 时间:
2018-08-03 21:20:16
阅读次数:
154
文字描述 堆排序中,待排序数据同样可以用完全二叉树表示, 完全二叉树的所有非终端结点的值均不大于(或小于)其左、右孩子结点的值。由此,若序列{k1, k2, …, kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。 若在输出堆顶的最小值之后,使得剩余n-1个元素的序列 ...
分类:
编程语言 时间:
2018-07-27 20:57:19
阅读次数:
171
二叉树的定义 一棵二叉树是结点的一个有限集合, 该集合或者为空,或者是由一个根结点加上两棵分别被称为左子树和右子树的,互不相交的二叉树组成。 二叉树的特点是每个结点最多有两个子女,分别称为左子女和右子女。 就是说,在二叉树中不存在度大于2的结点,并且二叉树的子树有左右之分, 其子树的次序不能颠倒,二 ...
分类:
其他好文 时间:
2018-07-23 22:11:32
阅读次数:
180
堆是具有下列性质的完全二叉树: 每个结点的值L[i]L[i]都大于或等于其左孩子L[left(i)]L[left(i)]和右孩子L[right(i)]L[right(i)]结点的值,称为大顶堆(最大堆); 每个结点的值L[i]L[i]都小于或等于其左孩子L[left(i)]L[left(i)]和右孩 ...
分类:
其他好文 时间:
2018-07-22 23:34:35
阅读次数:
216
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 线段树或者树状数组都可以做。 最近学线段树维护数据,所以我用线段树维护sum。 线段树实际上就是一个完全二叉树,用递归自顶向下进行访问。 最后因为一个等于号,调了一会。 ...
分类:
其他好文 时间:
2018-07-21 21:34:02
阅读次数:
135
堆排序是一种不稳定排序,其中构建初始堆经推导复杂度为O(n),在交换并重建堆的过程中,需交换n-1次,而重建堆的过程中,根据完全二叉树的性质,[log2(n-1),log2(n-2)...1]逐步递减,近似为nlogn 详情 http://www.cnblogs.com/chengxiao/p/61 ...
分类:
编程语言 时间:
2018-07-21 17:08:20
阅读次数:
186
一、二叉堆的定义 二叉堆使用完全二叉树(其前n-1层必须被填满,第n层也要从左到右顺序填满)来实现。 在二叉堆中,所有非终端结点的值均不大于(或不小于)其左右孩子的值。 若非终端结点的值均不大于其左右孩子结点的值,这样的二叉堆叫做小根堆(下图b), 小根堆根结点的值是该堆中所有结点的最小值; 同样的 ...
分类:
其他好文 时间:
2018-07-21 17:01:03
阅读次数:
124
关于重量平衡树的相关概念可以参考姊妹文章:重量平衡树之替罪羊树 Treap是依靠旋转来维护平衡的重量平衡树中最为好写的一中,因为它的旋转不是LL就是RR 对于每一个新的节点,它给这个节点分配了一个随机数,用作优先级,然后以这个优先级来维护一个堆结构 由于堆本身就是完全二叉树结构,这样维护之后的树就无 ...
分类:
其他好文 时间:
2018-07-18 20:46:38
阅读次数:
233