数据结构与算法——AVL树简介
来源:互联网 发布:怎么做淘宝客服怎么找 编辑:程序博客网 时间:2024/04/20 08:08
▪ 堆▪ 散列树▪ Finger tree▪ Metric tree▪ Cover tree▪ BK-tree▪ Doubly-chained tree▪ iDistance▪ Link-cut tree▪ 树状数组
二叉树:
任何节点最多只允许有两个子节点。
二叉搜索树:
可以提供对数时间的元素插入和访问。任何节点的键值一定大于其左子树中的每一个节点的键值,并不小于其右子树中的每一个节点的键值。
平衡二叉搜索树:
平衡的意思是,没有任何一个节点过深(深度过大)。二叉搜索树可能会在多次插入或删除之后,变得不平衡。
AVL-tree是一个"加上了额外平衡条件"的二叉搜索树,其平衡条件的建立是为了确保整棵树的深度为O(logN)。要求任何节点的左右子树高度相差最多1。
根节点到任一节点的路径长度,即所谓该节点的深度。根节点的深度永远为0.
平衡树和不平衡树的区别:
插入节点11之后,树变得不平衡了:
插入节点破坏了平衡条件的四种情况:
情况1,4对称,称为外侧插入,可以采用单旋转操作调整解决。
情况2,3对称,称为内侧插入,可以采用双旋转操作调整解决。
单旋转(旋转的情况为外侧插入):
双旋转(旋转的情况为内侧插入):
对于双旋转的情况,有一个特殊之处,比如上图,因为插入了15,引起了18的不平衡。15肯定是介于18和18的左子树之间的值。此时肯定要双旋转。
如果15的父节点不是18的子节点(上面的情况)双旋转其实就是将15的父节点代替18结点。(当然还是要旋转的,这只是一个特点)
如果15的父节点16是7的子节点(下面的情况)双旋转其实就是将15节点代替7结点。(当然还是要旋转的,这只是一个特点)
0 0
- 数据结构与算法——AVL树简介
- Java数据结构与算法解析(六)——AVL树
- Java数据结构与算法解析(六)——AVL树
- Java数据结构与算法解析(六)——AVL树
- 【数据结构与算法基础】AVL树 / AVL Tree
- 数据结构与算法10: 平衡二叉树AVL(AVL Tree)
- 数据结构—AVL树
- [数据结构与算法]AVL树的旋转
- C源码@数据结构与算法->AVL树
- 数据结构与算法简记:AVL树
- 数据结构与算法简记:AVL树
- Java数据结构与算法解析---AVL树
- 【算法】数据结构与算法分析学习笔记——第四章AVL树C语言实现
- 数据结构与算法专题之树——平衡二叉树(AVL树)
- 《数据结构与算法分析c++描述》读书笔记三——AVL树
- 数据结构与算法——AVL树类的C++实现
- 数据结构与算法分析(三) —— AVL树的实现
- 数据结构——AVL树
- leatcode 9.Palindrome Number
- Runtime使用场景
- java项目相对路径问题
- APUE之线程(五)
- Spring操作Mongodb
- 数据结构与算法——AVL树简介
- delegate、notification、KVO的使用场景总结
- 软件工程-web软件设计
- Android UI 控件之TextView
- 【架构篇】Android移动app架构设计浅谈
- 小白笔记--------------二分搜索算法
- 字符串应用(2)基本例程
- MR案例之倒排索引TF-IDF
- FragmentTransaction的commit的异步操作