#include<stdio.h>
#include<stdlib.h>
struct TreeNode {
int Data;
int Height;
struct TreeNode * Left;
struct TreeNode * Right;
};
struct TreeNode*Insert(struct TreeNode*T,int x){
if(T==NULL){
T=(struct TreeNode*)malloc(sizeof(struct TreeNode));
T->Data=x;
T->Height=0;
T->Left=NULL;
T->Right=NULL;
}else if(x<T->Data){
T->Left=Insert(T->Left,x);
}else{
T->Right=Insert(T->Right,x);
}
return T;
}
int Max(int a,int b){
return a>b?a:b;
}
int Height(struct TreeNode*T){
if(T==NULL){
return 0;
}
else{
return 1+Max(Height(T->Left),Height(T->Right));
}
}
void InOrder(struct TreeNode*T){
if(T!=NULL){
InOrder(T->Left);
printf("%d ",T->Data);
InOrder(T->Right);
}
}
struct TreeNode*FindMin(struct TreeNode*T){
if(T==NULL){
return NULL;
}
return (T->Left==NULL)?T:FindMin(T->Left);
}
struct TreeNode * Delete(struct TreeNode *T, int X) {
struct TreeNode *q;
if (T == NULL)
return T;
else if (X < T->Data)
T->Left = Delete(T->Left, X);
else if (X > T->Data)
T->Right = Delete(T->Right, X);
else {
if (T->Left != NULL && T->Right != NULL) {
q = FindMin(T->Right);
T->Data = q->Data;
T->Right = Delete(T->Right, q->Data);
} else {
q = T;
if (T->Left == NULL)
T = T->Right;
else if (T->Right == NULL)
T = T->Left;
free(q);
}
}
return T;
}
int main(){
int i,j;
struct TreeNode*T;
T=NULL;
for(i=0;i<5;i++){
scanf("%d",&j);
T=Insert(T,j);
}
T=Delete(T,6);
printf("\n");
printf("中序:");InOrder(T);
printf("\n");
return 0;
}