前面我们学习了斐波那契堆, 今天我们来学习二项堆!
二项堆
二项堆是二项树的集合或是由一组二项树组成。
二项堆H由一组满足以下性质的二项树组成:
1) H中的每个二项树都遵循最小堆性质:节点的关键字不大于其子节点的关键字。因此,根的关键字最小
2) 对任意非负整数k,在H中至多有一棵二项树的根具有度数k。
节点的定义
typedef struct BinomialNode
{
unsigned int key;
unsigned int degree;
struct BinomialNode* child;
struct BinomialNode* parent;
struct BinomialNode* sibling;
} BinomialNode;
key:节点值
degree:孩子个数
child: 指向左孩子
parent:该结点的父节点。
sibling:指向右兄弟
斐波那契堆的实现
下面就来看看斐波那契堆的C语言实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct BinomialNode
{
unsigned int