【堆合并】左式堆

左式堆是一种特殊的堆结构,保持堆序性质且左儿子的零路径长不小于右儿子。文章介绍了左式堆的性质,详细阐述了如何进行合并、插入、删除最小元的操作,以及如何构建左式堆。所有操作的时间复杂度都在O(logN)范围内。
摘要由CSDN通过智能技术生成

左式堆

定义:左式堆具有与二叉堆一样的堆序性质,但它不是理想平衡的二叉树。
性质:对于堆中的每一个节点X,左儿子的Npl至少与右儿子的Npl一样大,即Npl(左儿子) >= Npl(右儿子)。 (Npl: 任一节点X的零路径长Npl(X)定义为从X到一个没有两个儿子的节点的最短路径的长。)

堆结构及函数声明

typedef struct LeftHeap *Lefh;

Lefh Merge_node(Lefh, Lefh);    // 驱动Merge
static Lefh Merge(Lefh, Lefh);  // 实际Merge
Lefh inst(int, Lefh);   // 插入操作 视为 单节点堆与左式堆Merge
Lefh DelteMin(Lefh);    // 删除最小元 视为 删掉根而得到两个堆,再把两者Merge
void print(Lefh)        // bfs打印堆

struct LeftHeap
{
   
    int val;
    Lefh l;
    Lefh r;
    int npl;
};

合并<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值