平衡二叉树基于 查找二叉树。
大家知道如果,如果建立查找二叉树,的序列是随机的,二叉树的查找性能会接近 O(logn) ,但是如果,序列是顺序的如从小到大,建立的查找二叉树,就会变成一个所有节点只有右孩子的,链表。查找效率会退化成 O(n), 原因就是这棵树不平衡了。判断一个棵树平衡的标准是什么,如何构建和调整一棵树,使他平衡呢。答案就是 平衡二叉树(AVL)
1.什么是平衡因子?
是一个数值,每个节点的平衡因子 = 左子树的高度 - 右子树的高度
2.平衡二叉的标准是什么?
每个节点的平衡因子的绝对值都不超过1
3.如何添加元素使树保持平衡?
- 从插入的节点依次网上找他的根节点入栈。找到第一个不平衡的节点结束
- 出栈2个节点,第一个不平衡的节点,加上其他出栈节点一共三个节点,排序
- 中间的,当做跟节点,小的当做左子树,大的当做右子树,左右子树的孩子不动
- 对于没有位置的节点,根据查找二叉树的添加原则添加到树中。
4.如何删除元素使树保持平衡?
- 按照查找二叉树的删除原则,删除节点,并保存真正被删除节点的位置。
- 从真正被删除节点,向上找到第一个不平衡的节点
- 其他同上略
本文参考:【数据结构】五分钟告诉你什么是平衡二叉树 ?什么是二叉排序树?平衡因子的计算等等 干货满满!_哔哩哔哩_bilibili