左偏树浅析

左式堆(左偏树)


这是本垃圾的第一篇博客!!!!!!!!!!!!!!!!!
用心写的,希望能帮助那些比我帅气的
推荐一篇博客: 剉它
左式堆是 一颗堆有序的二叉树,但不是一颗完全二叉树
她具有优先级
她是可并堆的一种

重点:
堆序性 以及左偏性
堆序性人人都会吧,不会的话 电他
首先:::
外节点:左子树或右子树为空的节点
节点i的距离
dist(i):节点i到她的后代中最近的外节点所经过的边数

左偏性质:任意节点的左子节点的距离不小于右子节点的距离,即————
一个节点的距离等于以该节点为根的子树最右路径的长度

左偏树定理:若一颗左偏树有n个节点,则该左偏树的距离不超过 [log2(n+1)]-1
log这里取整

基本操作基操
1.合并操作:
沿着两颗左偏树的最右路径递归进行合并
O(log2 n)
想一想为什么

int *merge(int *a,int *b)
{
	if(a==NULL)
	return b;
	if(b==NULL)
	return a;
	
	if(b->key < a->key)swap(a,b);
	a->right=merge(a->right,b);
	if(a->right->dist > a->left->dist)swap(a->right,a->left);
	
	if(a->right==NULL)a->dist=0;
	else a->dist=a->right->dist+1;
	
	return a;
}

操作入栈,靠栈递归
应该都懂吧
2.插入
即 把插入节点作为一颗单节点左偏树,合并两颗左偏树,复杂度:O(log2 n)
不贴代码了**你们都辣么帅气,肯定会写的**
3.删除
即 把一颗左偏树的根节点先删除,再合并左右子树,复杂度:和帅逼楼主之前写的复杂度一样
还是不贴代码 楼主数学和cpp都不及格

by the way:::::::::
在实现左偏树的时候,通常喜欢用合并,而不是删除

why
becuase 楼主英语不好
这样可以避免类似堆的调整操作

左偏树是个很NB的东西!!!!!!!
她效率高

例题自己去找吧
楼主还要补作业呢

THE END

顺便说下:这是我入坑9个月纪念日!!!!!
谢谢阅读
没有人读

你可能感兴趣的:(毛大帅逼的cpp爆零生涯,cpp)