插入:比较简单,只需要确认这个元素是否在二叉树中存在
T Insert(Tree T,int Element){
if(!T){
T=(Tree)malloc(sizeof(***));
T->data = Element;
T->Left=T->Right=NULL;
return T;
}
if(Element < T->data){
Insert(T->Left,Element);
}
if(Element > T->data){
Insert(T->Right,Element);
}
else return NULL;
}
先用递归组织好查找顺序,再执行删除
如果两子树都不空,用右子树最小的来替代(或者用左子树最大的来替代)
如果一个空,用一个子树来替代
如果两个空,free这个节点
T Delete(Tree T,int Element){
if(!T) return NULL;
if(Element > T->Data)
Delete(T->Right,Element);
if(Element < T->Data)
Delete(T->Right,Element);
else{
if(T->Left && T->Right){
int temp = findMin(T->Right);
T->Element = temp;
Delete(T->Right,temp);
}
else{
tempT = T;
if(T->Left == NULL){
T=T->Right;
}
else if(T->Right == NULL);
T=T->Left;
free(tempT);
}
}
}
T findMin(Tree T){
if(T == NULL)
return NULL;
if(T->Left == NULL) return T;
return findMin(T->Left);
}
T findMax(Tree T){
if(T == NULL)
return NULL;
if(T->Right == NULL) return T;
return findMin(T->Right);
}