AVL tree 记忆
来源:互联网 发布:word表格数据排序 编辑:程序博客网 时间:2024/05/21 06:35
以前学的时候就迷迷糊糊,凑合就过去了。
今天做PAT一道题要实现AVL tree。。对着题弄了半天愣是没弄出来。
左旋右旋倒是都记得,只要看过图或者动画就很清晰明了,随便回想一下就记起来了。
关键是LL,LR,RL,RR四种情况的具体判断,以前没仔细抠,实现的时候才发现想不起来具体的判断标准了。。。
可能是被PAT题里的图误导了,没有注意到真正的判断标准。。
实际上区分四种情况的判断标准是:
从新插入处向上溯,找到第一个不符合AVL定义的平衡点,也就是其左右子树高度差大于一。方便起见,称为root。 (该点处理完后,取决于实现,可以继续上溯)
然后看,新插入的点,属于root的左子树的左子树,还是什么,共计四种情况,简称LL,LR,RL,RR。
注意判断标准,只是看属于root的左子树的左子树,这两层子树。其他的无关紧要的都不用管。比如说新加入点有多深,一路上是不是光秃秃的,还是枝繁叶茂,还是怎么着。全都没关系。
死抠上面那个标准就行。
看新加入节点属于哪两层子树,其实等价于看插入后root的左右子树哪个高(不平衡了,肯定能比出来),再看这个子树的左右子树哪个高(也肯定能比出来,如果比不出来,说明之前就不平衡了)。
但是实现上还是用新加入值和root的左右子树值比较,判断一层,再和该子树的左右比,再判断一层,比较干净利落。
因为可以用递归,递归退出的时候,自动是从插入处向上回溯的,所以代码也可以比较干净。
比如说下面两位写的,讲的都很清楚,代码也很好
http://www.cnblogs.com/skywang12345/p/3576969.html
http://dongxicheng.org/structure/avl/
几个小变种,
有用平衡因子代替高度的。
有再上溯过程中注意是否以上都没变化的。
- AVL tree 记忆
- AVL Tree
- AVL- tree
- avl tree
- AVL Tree
- AVL-TREE
- AVL Tree
- AVL Tree
- AVL Tree
- AVL tree
- AVL tree
- AVL Tree implemention
- AVL Tree Rotation
- AVL Tree 学习笔记
- AVL Tree 的实现
- Sicily 3825. AVL Tree
- Root of AVL Tree
- pat 1066(AVL Tree)
- php基础面试题
- mybatis 解析Integer为0的属性,解析成空字符串
- Protocol Buffer技术详解(语言规范)
- 搭建reactive-demo
- mysql数据库权限管理
- AVL tree 记忆
- 即使被拖库,也可以保证密码不泄露
- 小白分享——对html部分标签的介绍
- 逻辑回归示例
- TomCat服务器闪退问题
- Linux Make
- poj 2411 Mondriaan's Dream(状态压缩dp)
- 使用 Math 类操作数据
- spark学习笔记:构建独立应用并提交运行