左式堆(leftist tree 或 leftist heap),又被成为左偏树、左倾堆,最左堆等。 它和二叉堆一样,都是优先队列实现方式。当优先队列中涉及到”对两个优先队列进行合并”的问题时,二叉堆的效率就无法令人满意了,而本文介绍的左式堆,则可以很好地解决这类问题。 上图是一颗左倾树,它的节点除了和二叉树的节点一样具有...
由于左式堆的左孩子的Npl大于右孩子的Npl,所以当左孩子为空的时候,一定没有右孩子,如果一个堆没有左孩子H1和另一个堆H2合并,那么只需要将H2成为H1的左孩子即可,如程序中H1->left==NULL的情况,此情况属于merge1的递归结束情况。 如果左式堆有左孩子,那么不能直接将一个堆放在它的左孩子位置来合并,那么我们将根...
什么是左式堆 左式堆和二叉堆相似,也具有结构特性和有序性,但是左式堆和二叉堆不一样,并非是理想平衡的 出现原因 二叉堆的合并需要数组的拷贝,对于相同大小的堆将耗费许多,而合并用指针则方便许多,所以所有支持高效合并的高级数据结构都需要使用指针,而左式堆就是这样,使用指针实现 术语定义 零路径长NPL(X):从X到一...
这个性质实际上超出了它确保树不平衡的要求,因此它显然偏重于向左增加深度。确实有可能存在有左节点形成的长路径构成的树——因此,我们就有了名称左式堆。 定理:N个节点的左式树有一条最多含有log( N + 1 )个节点的右路径。 右路径:节点的右儿子的右儿子的右儿子...组成的路径。 二、左式堆操作: 1.合并(...
二叉堆进化——左式堆,又叫左偏树。像二叉堆那样,左式堆也具有结构特性和有序性,有着和二叉堆相同的heap property。他和二叉堆的唯一区别是:左式堆不是理想平衡的,而是趋向于极其不平衡,在拓扑形态上更倾向于向左倾斜的。那么,为什么要引入这一新的变种呢?让我们从它的设计动机以及结构定义说起。前面说了,我们的...
左式堆左式堆代码实现 左式堆 性质 零路径长 零路径长的定义为: 零路径长:从节点X到一个没有两个子节点的(有一个子节点或没有子节点)节点的最短距离 对于零路径长,有以下递归的计算方法: 每个节点的零路径长比子节点的最小零路径长大1 NULL的节点的零路径长为-1,只有一个子节点或没有子节点的节点零路径长...
(1) 左式堆以二叉树的形式构建 (2) 左式堆的任意节点的值比其子树任意节点值均小(最小堆的性质)。但左式堆不是一颗完全二叉树,而是一颗不平衡的树 (3) NPL是null path length的缩写,指的是从该节点到达一个没有两个孩子的节点(一个或无孩子)的最短距离,NULL的npl为-1。 左式堆左儿子的NPL大于等于右儿子...
左式堆 数据结构中最欣欣向荣的两个分支就是:平衡树 和可合并堆,高级树结构的核心都是围绕如何使树到达平衡而展开,高级堆结构的核心就是如何有效地进行合并。左式堆由于使用二叉链表的存储结构,对动态操作支持良好,在需要合并操作的场合,是极佳的选择。 左式堆的性质:...
三、操作 3.1 合并(merge) 代码地址 一、定义 左式堆是为了有效的支持合并操作(merge),将2个堆进行合并,不只是合并2个数组,还要维护其中的堆结构。左式堆像二叉堆那样具有结构性和有序性。也有堆序性质,也是二叉树,但它不是平衡的,而是趋向于非常不平衡。 1... 优先...
左式堆具有和二叉堆一样的堆序性 左式堆具有和二叉堆一样的结构性 左式堆和二叉堆的不同点: 左式堆虽然和二叉堆都是二叉树,但是左式堆和二叉堆不同的是,二叉堆接近完全完全二叉树,左式堆是不理想平衡的,更加直接的说,左式堆是趋向于非常不平衡的。 左式堆的一些概念 ...