左偏树leftistTree和斜堆skewHeap的分析和实现

最近学习了很多东西(深入学习操作系统中), 博客的更新也搁置了一段时间, 主要是学习占用了大量的时间 (学的越多, 也发现自己不会的越多, 就像苏格拉底说的"我只知道我一无所知");

今天主要分析一下左偏树和斜堆, 这两个数据结构是二叉堆的进化版, 一方面能够实现与二叉堆相同的功能, 代码结构也比较简单; 另一方面它们的合并操作的时间复杂度为O(logn), 而普通二叉堆实现合并操作的时间复杂度为O(n);

左偏树的性质:

--本节点的键值key小于其左右子节点键值key(与二叉堆相同);

--本节点的左子节点的距离大于等于本节点的右子节点(这意味着每个节点中除了要存储键值外, 还需要一个额外的dist存储距离);

--节点的距离是其右子节点的距离+1(这意味着, 一个节点的dist是从它出发到达最近终端节点的距离);

斜堆的性质:

--本节点的键值key小于其左右子节点键值key;

--斜堆节点不存储距离dist值, 取而代之的是在每次合并操作时都做swap处理(节省了存储空间);


核心操作: 合并操作(插入操作, 取最小操作都是基于合并操作);


左偏树(堆)merge函数具体实现:

--采用递归实现;

--每层递归中, 当roota->val > rootb->val时, 交换roota和rootb;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值