Node* search(Node* &root,int data) {
if (root == NULL) {
cout << "key not found\n";
return NULL;
}
if (root -> key == data)
return root;
else if(root-> key > data)
return search(root -> left,data);
else
return search(root -> right,data);
}
Node* findMinVal(Node* &root){
Node* current = root;
while (current -> left != NULL)
current = current -> left;
return current;
}
void deleteNode(Node* &root,int key) {
if (root == NULL)
return;
Node* node = search(root,key);
if (node -> left == NULL) {
Node* temp = node;
node = node -> right;
free(temp);
}
else if (node -> right == NULL) {
Node* temp;
node = node -> left;
free(temp);
}
else {
Node* temp = findMinVal(node -> right);
node -> key = temp -> key;
free(temp);
}
}
示例树:
对给定树的有序遍历:
20 30 40 50 60 70 80
输出和命令:
Delete 20
Inorder traversal of the modified tree
0 30 40 50 60 70 80