定义
双端堆:是一棵完全二叉树,该完全二叉树要么为空,要么同时满足下列性质:
(1) 根节点不包含元素;
(2) 左子树是一个最小堆;
(3) 右子树是一个最大堆;
(4) 如果右子树不空,令i是左子树中任意一节点,j是i在右子树中的对应节点。如果i在右子树中的对应节点不存在,则令j为i父节点在右子树中的对应节点。对于节点i和j,节点i的关键字小于等于j的关键字。
双端堆的插入操作
步骤
(1)若插入的新元素是在最小堆,将新插入节点与其在最大堆中对应节点相比较,如果大于对应节点,则将两个节点元素互换,对最大堆执行max_insert操作;否则,只需对最小堆执行min_insert操作。
(2)若插入的新元素是在最大堆,将新插入节点与其在最小堆中对应节点相比较,如果小于对应节点,则将两个节点元素互换,对最小堆执行min_insert操作;否则,只需对最大堆执行max_insert操作。