#include<stdio.h>
#include<stdlib.h>
typedef struct binTree {
int data;
struct binTree* left;
struct binTree* right;
}BT;
void creatTree(BT*& tree)
{
int a;
scanf_s("%d", &a);
if (a == -1)
{
tree = NULL;
}
else
{
tree = (BT*)malloc(sizeof(BT));
if (!tree) exit(-1);
tree->data = a;
creatTree(tree->left);
creatTree(tree->right);
}
}
bool BinSearch(int key, BT* tree, BT* f, BT* &p)
{
if ((!tree))
{
p = f;
return false;
}
else if (key == tree->data)
{
p = tree;
return true;
}
else if (key > tree->data)
{
return BinSearch(key, tree->right,tree,p);
}
else
{
return BinSearch(key, tree->left,tree,p);
}
}
void InsertBST(BT* &tree,int key)
{
BT* p;
BT* s;
if (! BinSearch(key,tree,NULL,p))
{
s = (BT*)malloc(sizeof(BT));
if (!s)
exit(-1);
s->data = key; s->left = s->right = NULL;
if (!p)
tree = s;
else
(p->data > key) ? p->left = s : p->right = s;
printf("插入成功\n");
}
else
{
printf("插入失败\n");
}
}
void Delete(BT*& tree)
{
BT* p;
BT* s;
if (! tree->left)
{
p = tree;
tree = tree->right;
free(p);
}
else if (! tree->right)
{
p = tree;
tree = tree->left;
free(p);
}
else
{
p = tree;
s = tree->left;
while(s->right)
{
p = s;
s = s->right;
}
tree->data = s->data;
if (p != tree)
{
p->right = s->left;
}
else
{
p->left = s->left;
}
delete s;
}
printf("\n删除成功\n");
}
void DeleteBST(BT*& tree, int key)
{
if (!tree)
printf("\n删除失败\n");
else if (tree->data == key)
Delete(tree);
else
(tree->data > key) ? DeleteBST(tree->left, key) : DeleteBST(tree->right, key);
}
void InorderTraversal(BT* tree)
{
if (tree) {
InorderTraversal(tree->left);
printf("%d ", tree->data);
InorderTraversal(tree->right);
}
}
void main()
{
BT* tree;
BT* p;
creatTree(tree);
InsertBST(tree,888);
InorderTraversal(tree);
DeleteBST(tree, 888);
InorderTraversal(tree);
}