目录
二叉排序树
定义
查找
原理
#include<stdio.h>
#define KeyType int
typedef struct{
KeyType key;
int information;
}ElemType;
typedef struct{
ElemType data;
struct BSTNode* lchild , *rchild;
}BSTNode , *BSTree;
int main(){
return 0;
}
递归实现
#include<stdio.h>
#define KeyType int
typedef struct{
KeyType key;
int information;
}ElemType;
typedef struct{
ElemType data;
struct BSTNode* lchild , *rchild;
}BSTNode , *BSTree;
BSTree SearchBST(BSTree T , KeyType key){
if(T == 0 || key == T->data.key){
return T;
}else if(key < T->data.key){
return SearchBST(T->lchild , key);
}else{
return SearchBST(T->rchild , key);
}
}
分析
操作
插入、生成
删除
(1)被删除的结点是叶子结点:直接删去该结点
双亲结点相应指针域的值改为“空”
(2)被删除的结点只有左子树或者右子树,用其左子树或者右子树替换它
双亲结点的相应指针域的值改为“指向被删除结点的左子树或者右子树”
(3)被删除的结点既有左子树,也有右子
只有一个子女的,拿那个子女补
有左右两个子女的,找右子树中序第一个结点补
平衡二叉树
定义
平衡调整方法
LL
RR
LR
RL
C上升到第一个
A是左孩子,B是右孩子
C左孩子是A右孩子
C右孩子是B左孩子
总结
直线型(LL,RR)
中间的放最上面
上是左孩子,下是右孩子
折现型
最下的放最上面
生成原理
(1)按二叉排序树放入
(2)算一遍所有结点的平衡因子(BF)
(3)BF绝对值都没超1,成功,重复(1)(2)(3)
有超1,结点数最小的那个,划分LL、RR、LR、RL
按对应平衡调整操作操作,使调整后结点的BF都不超过1
重复(1)(2)(3)
讲解视频见: