#include <stdio.h>
#include <stdlib.h>
#define NUM 16
typedef struct ND {
struct ND * leftchd;
struct ND * rightchd;
struct ND * next;
int data;
} node;
node * BST(node * np);
void insertnd(node * np,int a);
node * removnode(node * np,int value);
node * minnode(node * np);
int main() {
node * np = NULL;
np = BST(np);
return 0;
}
node * BST(node * np) {
int a = 0;
scanf("%d",&a);
if(a != -1) {
np = (node *)malloc(sizeof(node));
np->data = a;
np->leftchd = NULL;
np->rightchd = NULL;
np->next = NULL;
} else printf("error input!s%");
while(a != -1) {
scanf("%d",&a);
if(a != -1) {
insertnd(np,a);
}
}
return np;
}
void insertnd(node *np, int a) {
if(a < np->data) {
if(np->leftchd == NULL) {
np->leftchd = (node *)malloc(sizeof(node));
np->leftchd->data = a;
np->leftchd->leftchd = NULL;
np->leftchd->rightchd = NULL;
np->leftchd->next = NULL;
} else insertnd(np->leftchd,a);
} else {
if(np->rightchd == NULL) {
np->rightchd = (node *)malloc(sizeof(node));
np->rightchd->data = a;
np->rightchd->leftchd = NULL;
np->rightchd->rightchd = NULL;
np->rightchd->next = NULL;
} else insertnd(np->rightchd,a);
}
}
node * removnode(node * np,int value) {
if(np == NULL) {
return np;
}
if(np->data == value) {
if(np->leftchd == NULL||np->rightchd == NULL) {
node * temp = NULL;
if(np->leftchd == temp)
temp = np->rightchd;
else temp = np->leftchd;
if(temp == NULL)
np = NULL;
else np = temp;
} else {
node * temp = NULL;
temp = minnode(np->rightchd);
np->data = temp->data;
np->rightchd = removnode(np->rightchd,temp->data);
}
} else if(value < np->data) {
np->leftchd = removnode(np->leftchd,value);
} else {
np->rightchd = removnode(np->rightchd,value);
}
return np;
}
node * minnode(node * np) {
if(np->leftchd != NULL)
minnode(np->leftchd);
else return np;
}