首页 归档 关于 learn love 工具

二叉堆

在学习计算机编程的时候,堆栈是我们最经常使用到的概念,也是2种最基本的内存管理方式。可是在数据结构算法也有一个堆,还有叫二叉堆的。数据结构中的堆和二叉堆是同一个概念,它们和内存管理中的堆没有任何关系。

堆(heap)这个叫法最早还是用在数据结构中,比用在内存管理的时间早。为了区别说法,本文我们称前者是二叉堆,后者叫内存堆。

内存堆

内存堆通常和栈出现在一起叫内存堆栈:

  • 栈:是指函数调用是参数和局部变量的存储方式。在函数调用的时候由系统分配一块连续内存,局部变量都存在在栈中,在函数结束后统一释放。函数间的调用关系也是由函数栈通过先进先出的规则管理。
  • 堆:是动态分配的,需要程序主动控制。

二叉堆

二叉堆满足以下条件:

  • 全二叉树(即:一定要先填满上面的)
  • 父节点比子节点重(二叉搜索树是父节点比左子节点重,但比右子节点轻)

二叉堆看着是二叉树,实际上在存储中还是使用数组,由于是全二叉树,子节点可以通过2k和2k + 1来定位。

参考

https://www.jianshu.com/p/00fac80c1b25
https://writings.sh/post/data-structure-heap-and-common-problems