左式堆
定义:左式堆具有与二叉堆一样的堆序性质,但它不是理想平衡的二叉树。
性质:对于堆中的每一个节点X,左儿子的Npl至少与右儿子的Npl一样大,即Npl(左儿子) >= Npl(右儿子)。 (Npl: 任一节点X的零路径长Npl(X)定义为从X到一个没有两个儿子的节点的最短路径的长。)
堆结构及函数声明
typedef struct LeftHeap *Lefh;
Lefh Merge_node(Lefh, Lefh); // 驱动Merge
static Lefh Merge(Lefh, Lefh); // 实际Merge
Lefh inst(int, Lefh); // 插入操作 视为 单节点堆与左式堆Merge
Lefh DelteMin(Lefh); // 删除最小元 视为 删掉根而得到两个堆,再把两者Merge
void print(Lefh) // bfs打印堆
struct LeftHeap
{
int val;
Lefh l;
Lefh r;
int npl;
};