“ Ctrl AC!一起 AC!”
目录
二叉搜索树
概述:
一般操作:
1.查找某元素:
Position IterFind(ElementType X,BinTree BST){
while(BST){
if(X>BST->Data){
BST=BST->Right;
}
else if(X<BST->Data){
BST=BST->Left;
}
else return BST;
}
return NULL;
}
2.查找最大最小值:
Position FindMax(BinTree BST){
if(BST){
while(BST->Right) BST=BST->Right;
}
return BST;
}
Position FindMin(BinTree BST){
if(BST){
while(BST->Left) BST=BST->Left;
}
return BST;
}
3.插入元素:
BinTree Insert(ElementType X,BinTree BST){
if(!BST){
BST=malloc(sizeof(struct TreeNode));
BST->Data=X;
BST->Left=BST->Right=NULL;
}
else{
if(X<BST->Data){
BST->Left=Insert(X,BST->Left);
}
if(X>BST->Data){
BST->Right=Insert(X,BST->Right);
}
}
return BST;
}
4.删除元素:
BinTree Delete(ElementType X,BinTree BST){
Position Tmp;
if(!BST) printf("要删除的元素未找到!\n");
else if(X<BST->Data) BST->Left=Delete(X,BST->Left);
else if(X>BST->Data) BST->Right=Delete(X,BST->Right);
else {
if(BST->Left&&BST->Right){
Tmp=FindMin(BST->Right);
BST->Data=Tmp->Data;
BST->Right=Delete(BST->Data,BST->Right);
}
else{
Tmp=BST;
if(!BST->Left) BST=BST->Right;
else if(!BST->Right) BST=BST->Left;
free(Tmp);
}
}
return BST;
}
平衡二叉树
概述:
调整:
平衡二叉树删除后插入结点时,容易破坏平衡,这时需要调整平衡。
1.RR插入及调整:
2.LL插入及调整:
3.LR插入及调整:
4.RL插入及调整:
5.注意:
感谢阅读!!!
“ Ctrl AC!一起 AC!”