《算法》-3.3平衡查找树(1)
来源:互联网 发布:python 接收上传图片 编辑:程序博客网 时间:2024/06/03 12:32
3.3 平衡查找树
理想情况下如何保持二叉树的平衡?这里引入平衡查找树。
3.3.1 2-3查找树
2-3查找树定义:
2-节点,含有一个键(及其对应值)和两条链接,左链接指向的节点的键小于该节点,右链接指向的节点的键大于该节点;
3-节点,含有两个键(及其对应值)和三条链接,左链接指向的节点的键都小于该节点,中链接指向的节点的键介于节点的两个键之间,右链接指向的节点的键都大于该节点;
指向一棵空树的链接成为空链接;
3.3.1.1 查找
将二叉树的查找算法一般化:向将要查找的节点与根节点比较,如果和任意一个相等则命中,否则根据比较结果到相应的链接(左、中、右)查找,并在其指向的子树中查找;直到最后找到空连接,则查找未命中。
3.3.1.2 向2-节点中插入新键
先进行一次未命中查找,找到新结点将要插入的位置(某一个叶子节点的底部);
该叶子节点是2-节点,直接将该2-节点变成一个新的含有新建的3-节点
3.3.1.3向一课只含有一个3-节点的树中插入新键
先进行一次未命中查找,找到新结点将要插入的位置;
将该3-节点变成一个含新键的4-节点(左键、中键、右键);
将4-节点分解成3个2-节点:中键节点的左链接指向左键节点,右链接指向右键节点;
3.3.1.4向一个父节点为2-节点的3-节点中插入新键
先进行一次未命中查找,找到新结点将要插入的位置;
将3-节点变成4-节点;
将中键节点加入到父节点2-节点中,变成3-节点,中链接指向左键节点,右链接指向右键节点;
(插入后所有空连接到根节点的距离仍然相同,树仍完美平衡;)
3.3.1.5向一个父节点为3-节点的3-节点中插入新键
先进行一次未命中查找,找到新结点将要插入的位置(一个3-节点);
将要插入位置的3-节点变成4-节点;
再用这个中间向上(父节点)构造临时的4-节点,并变换链接;
再分解这个父节点,将它的中键插入到它的父节点中,直到遇到一个2-节点并将它替换为一个不需要继续分解的3-节点,或者达到根(根变为3-节点)。
3.3.1.6分解根节点
如果从插入节点到根节点,一路都是3-节点,那么根节点最后变为4-节点,这时要对根节点进行分解;
将根节点分解为3个2-节点,树高加1;
3.3.1.7局部变换
将4-节点分解为一颗2-3树有6中情况:
1) 根节是3-节点
2) 父节点是2-节点,左链接指向4-节点
3) 父节点是2-节点,右链接指向4-节点
4) 父节点是3-节点,左链接指向4-节点
5) 父节点是3-节点,中链接指向4-节点
6) 父节点是3-节点,右链接指向4-节点
3.3.1.8全局性质
上述局部变换不影响树的有序性和平衡性;
变换前根节点到所有空连接的路径长度为h,变换后该长度仍然是h;
只有当根节点被分为3个2-节点时,所有空连接到根节点的路径长度才会加1;
- 《算法》-3.3平衡查找树(1)
- 《算法》-3.3平衡查找树(2)
- 算法系列(九)平衡二叉查找树AVL树
- 算法5-1:平衡查找树之二三树
- AVL树的插入删除查找算法实现和分析-1(平衡因子法)
- AVL树的插入删除查找算法实现和分析-1(平衡因子法)
- 平衡二叉查找树的基本算法
- 查找算法及二叉平衡树
- 查找算法总结(4)--平衡二叉树
- 《 常见算法与数据结构》平衡查找树(1)—— 2-3查找树(附动画)
- 平衡树、平衡二叉查找树、二叉排序树(查找树)
- 查找、检索 算法-总结3 平衡二叉查找树 [AVL]
- 数据结构之自平衡二叉查找树(1)
- 浅谈算法和数据结构(8):平衡查找树之2-3树
- 浅谈算法和数据结构(10):平衡查找树之B树
- 经典数据结构与算法(二):平衡查找树之2-3树
- 二叉查找树、平衡树、伸展树、红黑树 算法
- 【第14周-查找项目1-4——验证平衡二叉树相关算法】
- Angular2-Bootstrap的继承
- SSL certificate problem: self signed certificate
- SDNU 1147 Pythagoras's Revenge 【技巧暴力】
- 大数据竞赛平台——Kaggle 入门篇
- 一些问题的解决
- 《算法》-3.3平衡查找树(1)
- 算法系列——Balanced Binary Tree
- 时间插件
- 程序员修炼之道:从小工到专家pdf
- 趣味题:李白打酒
- 编译easyPR(Win7 64位 OpenCV3.2)
- malloc的实现
- javascript事件委托
- Linux下的curl命令学习