- 1
- 0
- 约5.73千字
- 约 7页
- 2026-05-24 发布于河北
- 举报
堆(Heap)面试题及详细答案
一、基础概念题(必问,考察基础掌握度)
1.请用自己的话解释一下什么是堆?堆和栈有什么本质区别?(避免背定义,重点考理解)
答案:堆是一种特殊的完全二叉树,核心特性是“父节点的值要么大于等于所有子节点(大顶堆),要么小于等于所有子节点(小顶堆)”,它的主要作用是快速获取最值(大顶堆取最大值,小顶堆取最小值)。
堆和栈的本质区别,不在于“内存区域”(虽然内存里有堆区和栈区,但这是编程中的内存划分,不是数据结构的堆和栈),而在于数据结构的特性和用途:
①结构不同:堆是完全二叉树(逻辑结构),物理上通常用数组存储;栈是线性结构,遵循“先进后出”(LIFO)。
②核心用途不同:堆主要用于快速找最值、排序(堆排序)、优先队列实现;栈主要用于函数调用、表达式求值、临时数据存储(比如括号匹配)。
③操作效率不同:堆的插入、删除(弹出最值)效率是O(logn);栈的push、pop操作是O(1)。
2.什么是完全二叉树?为什么堆要采用完全二叉树结构?
答案:完全二叉树的定义是:除了最后一层,每一层的节点数都达到最大值,且最后一层的节点都集中在左侧(从左到右连续排列,不能有空缺)。比如,一棵深度为3的完全二叉树,第1层1个节点,第2层2个节点,第3层最多4个节点,若第3层只有3个节点,必须是前3个(左侧),不能是中间或右侧空缺。
堆采用完全二叉树结构,核心
原创力文档

文档评论(0)