最近在学习AVL树的转换,本以为自己挺擅长的,但却经常转错。经过思考发现:没有理解原理肯定知识运用的就比较生疏!所以我就在小伙伴的帮助以及大量查阅资料的情况下了解了一些关于二叉排序树,平衡二叉树和AVL树的知识,分享给大家,希望可以有帮助!
平衡二叉树:
它或者是一颗空树;
或者是这样一颗树:树种任一节点的左右子树的深度相差不超过1。
也就是节点平衡度只能为0,1,-1三个值中的一个
二叉排序树:
又叫查找二叉树
它是一颗空树;
或者满足二叉排序树的性质为:
1、若它的左子树非空,则左子树上所有结点的值均小于根结点的值。
2、若它的右子树非空,则右子树上所有结点的值均大于根结点的值。
3、左、右子树本身是二叉排序树。
AVL树:
又叫平衡二叉查找树,我自己认为其实AVL树是平衡二叉树和二叉排序树的结合,用于提高二叉排序树的查找效率!
AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis。
我注意到:书上说平衡二叉树又称为AVL树,但是由上面的对比我们可以很明白的看出来,他们两之间还是有一定的区别的!一定不要弄混了!
AVL树的动态转换:
分析二叉排序树的查找过程,我们可以明显的发现只有在树的形态比较均匀的情况下,查找效率才能达到最佳!而把二叉排序树转化为AVL树就可以让不平衡的二叉排序树的查找效率达到最好!如何转化呢?
建议大家看下边的类型转换的时候,注意各个结点的大小(数字)的变化。
LL型变换:
RR型变换:
LR型双向旋转平衡处理:
RL型双向旋转平衡处理:
根据不平衡的二叉排序树的情况,对应上面的四种转换,就可以非常简单的把不平衡的二叉排序树转换成AVL树,从而保证二叉排序树的查找效率最高!
平衡二叉树一定是二叉排序树吗?
不一定是。
从上面的定义到引申的讲解我们可以知道:平衡二叉树的定义只是它的平衡因子取1,-1,0而已,也就是任何一个二叉树只要满足平衡因子是这三个值就是平衡二叉树!
而二叉排序树使用平衡二叉树的作用只是为了将二叉排序树和平衡二叉树结合成AVL树,从而使二叉排序树的查找更高效而已!
小总:
每次小组讲课的时候,组员们都会说自己不会平衡二叉树的问题,然后每次给组员讲,自己也都是非常的糊涂,所以索性就把它弄个清楚再讲,而不是针对某个题去讲,这不就更好的学会了这些知识了嘛!软考还没有结束,知识还需要查询理解并总结啊!大家不要再囫囵吞枣了!