数据结构面试的常客,一文带你深入了解堆

本文介绍了堆这一数据结构,包括堆的定义、插入、查询与弹出,以及堆与优先队列的关系。堆是完全二叉树,分为大顶堆和小顶堆,具有大小传递性。在插入元素时,通过向上更新维护堆的性质;弹出元素时,通过向下更新保持堆的结构。堆是实现优先队列的基础,Python中提供了现成的堆库方便使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

和链表、二叉树以及数组这些热门的数据结构相比,堆相对比较冷门。如果你对数据结构了解不深的话,可能很少听说。但是我们经常用到它,虽然可能你并不一定能感知到。比如说优先队列,我们就经常使用。我们需要用到这样一个数据结构,能够根据我们存入数据的优先级进行排序,将优先级高的排在前面。在和调度相关的一些系统和算法当中,优先队列是必然会用到的。但是很少有人知道,优先队列说是一个队列,但其实是通过堆实现的。

那么堆究竟是一个怎样的数据结构呢?

堆的定义

堆的实质其实是二叉树,并且还不是一般的二叉树,而是比较特别的二叉树。

特别在什么地方呢,在于这棵二叉树除了叶子之外的所有节点都是“满”的。所谓的满,也就是没有空缺的意思。

从上图当中我们可以看到,如果去掉最后一层,那么这棵二叉树就是全满的。最后一层叶子节点也是有要求的,要求叶子节点都靠左对齐。满足这两个条件的二叉树成为完全二叉树(complete binary tree)。这个概念如果记不住也没有关系,我好像也只在堆当中遇到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文宇肃然

精神和物质鼓励你选一个吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值