树表的操作

在这里插入图片描述

二叉排序树

二叉排序树的定义

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
 

二叉排序树的存储结构

在这里插入图片描述

在这里插入图片描述
 

二叉排序树的操作

二叉排序树插入

在这里插入图片描述
在这里插入图片描述
 

二叉排序树创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
 

二叉排序树查找

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
 

二叉排序树删除

在这里插入图片描述

被删除的结点是叶子结点

在这里插入图片描述

被删除的结点只有左子树或者右子树

在这里插入图片描述

被删除的结点即有左子树又有右子树

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
 
 

平衡二叉树

平衡二叉树的定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

失衡二叉排序树的分析与调整

在这里插入图片描述 
 

构造平衡二叉树的基本思想

在这里插入图片描述

从问题的发现者(最小不平衡子树)开始判断是那种类型
最小不平衡子树到新加入左/右子树的双亲结点
在这里插入图片描述

在这里插入图片描述
 

LL型调整

顺时针旋转
如果一个节点的平衡因子为2,设这个节点为root
它的左孩子,设为node,node = root->lchild;
在node的左孩子新增了一个节点,而导致root的平衡因子为2

那么,我们为了平衡将要进行以下操作
1.root->lchild = node->rchild;
2.node->rchild = root;

将node作为新的根节点,
并且将node的右孩子点(比node大,比root小),接到root的左孩子上
在这里插入图片描述
 

RR型调整

逆时针旋转
如果一个节点的平衡因子为2,设这个节点为root
它的右孩子,设为node,node = root->rchild;

在node的右孩子新增了一个节点,而导致root的平衡因子为2

那么,我们为了平衡将要进行以下操作
1.root->rchild = node->lchild;
2.node->lchild = root;

将node作为新的根节点,
并且将node的左孩子点(比node小,比root大),接到root的右孩子上
在这里插入图片描述
 

LR型调整

设平衡因子为2的节点为root
设平衡因子为2的节点的左孩子为node,node = root->lchild;

在node节点右孩子新增了一个节点,导致root的平衡因子为2

那么我们要先让nodenode的右孩子做一次逆时针(RR)
设node的右孩子为temp,temp = node->rchild;

node->rchild = temp->lchild;
temp->rchild = node;
将temp的左孩子(比temp小,比node大),转接到node的右孩子上
然后让temp成为node的根结点,temp成为root的左孩子

此时我们会发现,root,temp,node是在同一个方向的(root > temp > node)
然后我们让root和temp做一个顺时针,使temp作为根节点(LL)
root->lchild = temp->rchild;
temp->rchild = root;
将temp的右孩子(比temp大,比root小),转接到root的左孩子上
temp成为根节点
在这里插入图片描述

RL型调整

设平衡因子为2的节点为root
设平衡因子为2的节点的右孩子为node,node = root->rchild;

在node节点左孩子新增了一个节点,导致root的平衡因子为2

那么我们要先让nodenode左孩子做一次顺时针旋转(LL)
设node的左孩子为temp,temp = node->rchild;

node->lchild = temp->rchild;
temp->rchild = node;
将temp的右孩子(比temp大,比node小),转接到node的左孩子上
然后让temp成为node的根结点,temp成为root的右孩子

此时我们会发现,root,temp,node是在同一个方向的(root < temp < node)
然后我们让root和temp做一个逆时针旋转,使temp作为根节点(RR)
root->rchild = temp->lchild;
temp->lchild = root;
将temp的右孩子(比temp小,比root大),转接到root的右孩子上
temp成为根节点
在这里插入图片描述

在这里插入图片描述
 

习题

如果忘了,就做做下面的题目,用程序先序遍历判断对错

13 10 16 7 17 12 18 9 8
25 18 48 7 76 52 81 70 92 15
25 18 76 13 79 20 9 15 5 77
29 37 23 12 7 25
13 24 37 90 53

おすすめ

転載: blog.csdn.net/zyy130988/article/details/121501808