前言
数据结构二叉树拓展
一、线索二叉树:
规律:在有n个节点的链式二叉树中,必定有n+1个空指针域
链式二叉树中有很多的空指针,可以让这些指针指向下一个节点,这样遍历树时可以不用递归而是使用循环,提高树的遍历速度
中序线索二叉树:
节点数据项:
数据
左子树指针
右子树指针
右子树指针标志(真表示指向的时下一个节点,假表示指向的就是右子树)
实现过程:
1、创建线索
2、按照线索进行遍历
注意:线索二叉树的主要目的时为了提高树的遍历速度
二、选择树:(胜者树、败者树)
一颗完全二叉树,把待比较的数据存储在最后一层,根节点是左右子树中的一个,
是它们的最大或最小的作为根,选择树的功能是能够方便地找出树中的最大值或者
最小值
三、堆:
是一种完全二叉树
大顶堆(大根堆):根节点比左右子树大
小顶堆(小根堆):根节点比左右子树小
数据项:
存储数据的内存首地址
容量
数量
运算:
创建、添加、删除、空堆、满堆、查看堆顶
使用堆可以实现优先队列
四、平衡二叉树
前提是有序的二叉树,它的右子树高度差不超过1,而且它的所有子树也要满足这个条件。
如果一颗有序二叉树呈单支状(接近单支状),因此如果让它道道平衡的状态它的效率才最高
由于节点的位置是受值的影响,因此只能进行调整,而不能强行修改
二叉树不平衡的基础原因:
X y
/ \ / \
y t1 z x
/ \ 以y为轴向右旋转 / \ / \
z t2 t3 t4 t2 t1
/ \
t3 t4
X y
/ \ / \
t1 y x z
/ \ 以y为轴向左旋转 / \ / \
t2 z t1 t2 t3 t4
/ \
t3 t4
X X z
/ \ / \ / \
y t1 z t1 y x
/ \ / \ / \ / \
t2 z y t4 t2 t3 t4 t1
/ \ / \
t3 t4 t2 t3
以z为轴向左旋转 以z为轴向右旋转 最终达到平衡
X X z
/ \ / \ / \
t1 y t1 z x y
/ \ / \ / \ / \
z t2 t3 y t1 t3 t4 t2
/ \ / \
t3 t4 t4 t2
以z为轴向右旋转 以z为轴向左旋转 最终达到平衡
五、红黑树
也是一种自平衡的有序二叉树,它不是根据子树的高度差来调整平衡的,而是给每个节点设置红或黑两个颜色,以此达到平衡。
优点:插入、删除的效率要比AVL树要高
缺点:没有AVL树均匀,查找效率没有AVL树高
总结
以上,有错误,还请指正