未经測试:public class BinaryHeap { public static final int INIT_CAPACITY = 10; private int[] mArray; private int mLength; public BinaryHeap() { mArray = n ...
分类:
其他好文 时间:
2017-05-21 09:56:09
阅读次数:
145
Description 斜堆(skew heap)是一种常用的数据结构。它也是二叉树,且满足与二叉堆相同的堆性质:每个非根结点的值 都比它父亲大。因此在整棵斜堆中,根的值最小。但斜堆不必是平衡的,每个结点的左右儿子的大小关系也没有任 何规定。在本题中,斜堆中各个元素的值均不相同。 在斜堆H中插入新元 ...
分类:
其他好文 时间:
2017-05-20 20:37:02
阅读次数:
147
容易证明: 一棵高为h的完全二叉树有2^h 到 2^(h+1)-1个结点。 这就意味着,完全二叉树的高是[logN] 特点: 任意位置i: 左儿子在位置2i上,右儿子在位置2i+1上,父亲在i/2上 一个堆数据结构将由一个Comparable数组和一个代表当前堆的大小的整数组成: 优先队列的接口: ...
分类:
其他好文 时间:
2017-05-19 23:57:14
阅读次数:
175
注:本节主要讨论最大堆(最小堆同理)。 一、堆的概念 堆,又称二叉堆。同二叉查找树一样,堆也有两个性质,即结构性和堆序性。 1、结构性质: 堆是一棵被全然填满的二叉树。有可能的例外是在底层。底层上的元素从左到右填入。这种树称为全然二叉树(complete binary tree)。下图就是这样一个样 ...
分类:
其他好文 时间:
2017-05-14 12:22:30
阅读次数:
126
左式堆也是实现优先列队的一种数据结构,和二叉堆一样,左式堆也具有堆序性和结构性。 堆序性: 一个节点的后裔都大于等于这个节点。 结构性:左式堆也是二叉树,和二叉堆的唯一区别在于左式堆不是理想平衡的,实际上是趋于非常不平衡,对于堆中每一个节点X,左儿子的零路径长至少与右儿子的零路径长一样大,零路径长N ...
分类:
其他好文 时间:
2017-05-08 23:25:01
阅读次数:
281
首先,我们回顾一下二叉查找树(binary search tree, BST)。 二叉查找树具有下列性质: BST 的插入 首先执行查找算法,找出被插结点的父亲结点。 若 key 值比当前结点小,则进入左儿子。 若 key 值比当前结点大,则进入右儿子。 最坏情况下,当先后插入的关键字有序时,二叉查 ...
分类:
其他好文 时间:
2017-05-01 22:27:45
阅读次数:
309
定义 具有映射功能的堆称为双向映射堆。堆又名二叉堆,所以也常常称其为映射二叉堆。 映射二叉堆相比普通的堆,核心功能是支持元素的快速查找,可以在O(logn) 的时间复杂度内找到索引为 id 的元素 (没有重复索引,索引并非堆中用来比较大小的关键字),并进行后续的修改或删除等操作。 映射二叉堆与普通堆 ...
分类:
其他好文 时间:
2017-05-01 18:21:17
阅读次数:
227
1、二叉堆的操作 (1)取出元素 (2)插入元素 (3)删除元素 //手写大根堆维护 #include<bits/stdc++.h> using namespace std; int heap[1000]; int up(int x) { if(heap[x]<=heap[x/2]) return ...
分类:
其他好文 时间:
2017-04-30 22:54:51
阅读次数:
241
Java实现二叉树及相关遍历方式 在计算机科学中。二叉树是每一个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。下面用Java实现对二叉树的先序遍历,中序遍历,后序遍历。广度优先遍历。深 ...
分类:
编程语言 时间:
2017-04-27 11:43:14
阅读次数:
231