#include
#include
struct TreeNode{
int data;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode *findMin(struct TreeNode *T){
if(T==NULL){
return NULL;
}
if(T->left==NULL){
return T;
}
return findMin(T->left);
}
struct TreeNode *deleteNode(struct TreeNode *T,int num){
if(T==NULL){
return NULL;
}
if(T->data>num){
T->left=deleteNode(T->left,num);
}else if(T->dataright=deleteNode(T->right,num);
}else if(T->left!=NULL&&T->right!=NULL){
struct TreeNode *min=findMin(T);
T->data=min->data;
T->right=deleteNode(T->right,min->data);
}else{
struct TreeNode *temp;
temp=T;
if(T->left==NULL){
T=T->right;
}else if(T->right==NULL){
T=T->left;
}
free(temp);
}
return T;
}
struct TreeNode *createNode(int num){
struct TreeNode *T;
T=(struct TreeNode *)malloc(sizeof(struct TreeNode));
T->data=num;
T->left=NULL;
T->right=NULL;
return T;
}
struct TreeNode *add(struct TreeNode *T,int num){
if(T==NULL){
return createNode(num);
}
if(numdata){
T->left=add(T->left,num);
}else if(num>T->data){
T->right=add(T->right,num);
}
return T;
}
void PreOrder(struct TreeNode *T){
if(T!=NULL){
printf("t%d",T->data);
PreOrder(T->left);
PreOrder(T->right);
}
}
void InOrder(struct TreeNode *T){
if(T!=NULL){
InOrder(T->left);
printf("t%d",T->data);
InOrder(T->right);
}
}
void PostOrder(struct TreeNode *T){
if(T!=NULL){
PostOrder(T->left);
PostOrder(T->right);
printf("t%d",T->data);
}
}
int main(){
struct TreeNode *T;
T=NULL;
for(int i=0;i<12;i++){
T=add(T,i);
}
printf("前序遍历:n");
PreOrder(T);
printf("n中序遍历:n");
InOrder(T);
printf("n后序遍历:n");
PostOrder(T);
deleteNode(T,3);
deleteNode(T,5);
printf("n删除节点值为3,5后的二叉树:");
printf("n前序遍历:n");
PreOrder(T);
printf("n中序遍历:n");
InOrder(T);
printf("n后序遍历:n");
PostOrder(T);
return 0;
}