typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node, *code;
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
Node* insert(Node* root, int data) {
if (root == NULL) {
return createNode(data);
}
if (data < root->data) {
root->left = insert(root->left, data);
} else {
root->right = insert(root->right, data);
}
return root;
}
Node* delete(Node* root, int data) {
if (root == NULL) {
return NULL;
}
if (root->data < data) {
root->right = delete(root->right, data);
} else if (root->data > data) {
root->left = delete(root->left, data);
} else {
Node* q, *s;
if (root->left == NULL) {
q = root;
root = root->right;
free(q);
} else if (root->right == NULL) {
q = root;
root = root->left;
free(q);
} else {
q = root;
s = root->right;
while (s->left != NULL) {
q = s;
s = s->left;
}
root->data = s->data;
if (q != root) {
q->left = s->right;
} else {
q->right = s->right;
}
free(s);
}
}
return root;
}
void inorder(Node* root) {
if (root != NULL) {
inorder(root->left);
printf("%d ", root->data);
inorder(root->right);
}
}
int main() {
code root = NULL;
root = insert(root, 50);
insert(root, 30);
insert(root, 20);
insert(root, 70);
insert(root, 60);
insert(root, 80);
insert(root, 90);
printf("中序遍历: ");
inorder(root);
printf("\n");
root = delete(root, 50);
printf("中序遍历: ");
inorder(root);
printf("\n");
return 0;
}