当我从二叉树(BT)中删除25时,它能完美地工作。 但是当我想删除另一个数字,比如17时, 它会将17与其他一些数字一起从BT中删除。
#include<iostream>
using namespace std;
struct node
{
int data;
node *left;
node *right;
};
node *root = NULL;
node* createnode(int data)
{
node *t = new node();
t->data = data;
t->left = NULL;
t->right = NULL;
return t;
}
node* min(node*);
node* insert(node *root, int data)
{
if (root == NULL)
{
root = createnode(data);
return root;
}
else{
node *t = root;
if (data <= t->data)
t->left = insert(t->left, data);
else{
t->right = insert(t->right, data);
}
}
}
node* print(node *root)
{
if (root == NULL)
{
return root;
}
else{
cout << root->data << " ";
print(root->left);
print(root->right);
}
return root;
}
node* deleten(node *root, int data)
{
if (root == NULL)
return root;
else{
if (data<root->data)
root->left = deleten(root->left, data);
if (data>root->data)
root->right = deleten(root->right, data);
else{
if (root->left == NULL && root->right == NULL)
{
node *t = root;
root = NULL;
delete t;
}
else if (root->left == NULL)
{
node *t = root;
root = root->right;
delete t;
}
else if (root->right == NULL)
{
node *t = root;
root = root->left;
delete t;
}
else{
node *t = min(root->right);
root->data = t->data;
root->right = deleten(root->right, t->data);
}
}
return root;
}
}
node* min(node *root)
{
if (root == NULL)
return root;
else{
if (root->left != NULL)
min(root->left);
else{
return root;
}
}
}
int main()
{
root = insert(root, 15);
root = insert(root, 10);
root = insert(root, 8);
root = insert(root, 12);
root = insert(root, 11);
root = insert(root, 20);
root = insert(root, 23);
root = insert(root, 17);
root = insert(root, 25);
root = print(root);
cout << endl;
root = deleten(root, 17);
root = print(root);
}
案例1:
删除前:15 10 8 12 11 20 17 23 25
删除后:15 10 8 12 11 23 25 // root=deleten(root,17);
期望结果:15 10 8 12 11 20 23 25
案例2:
删除前:15 10 8 12 11 20 17 23 25
删除后:15 10 8 12 11 20 17 23 // root=deleten(root,25);
期望结果:15 10 8 12 11 20 17 23
案例3:
删除前:15 10 8 12 11 20 17 23 25
删除后:17 12 11 23 25 // root= deleten(root,8);
期望结果:15 10 12 11 20 17 23 25
root= deleten(root,8);
发生了什么吗? - PilouPiliif (data<root->data) root->left = deleten(root->left, data); if...
- user10957435