TreeNode
*
min_node(TreeNode
*
t)
... {
if (t == NULL) ...{
return NULL;
}
if (t->left != NULL) ...{
return min_node(t->left);
}else...{
return t;
}
}
void rem_node( int value, TreeNode *& t)
... {
if (value < t->value) ...{
rem_node(value, t->left);
}
else if ( value > t->value) ...{
rem_node(value, t->right);
}
else if (t->left != NULL && t->right != NULL) ...{//左子树非空,右子树非空
TreeNode *tmp = min_node(t->right);
t->value = tmp->value;
rem_node(tmp->value, tmp);
}
else...{
TreeNode *tmp = t;
if (t->left == NULL ) ...{
t = t->right;
}
else...{
t = t->left;
}
free(tmp);
tmp = NULL;
}
}
... {
if (t == NULL) ...{
return NULL;
}
if (t->left != NULL) ...{
return min_node(t->left);
}else...{
return t;
}
}
void rem_node( int value, TreeNode *& t)
... {
if (value < t->value) ...{
rem_node(value, t->left);
}
else if ( value > t->value) ...{
rem_node(value, t->right);
}
else if (t->left != NULL && t->right != NULL) ...{//左子树非空,右子树非空
TreeNode *tmp = min_node(t->right);
t->value = tmp->value;
rem_node(tmp->value, tmp);
}
else...{
TreeNode *tmp = t;
if (t->left == NULL ) ...{
t = t->right;
}
else...{
t = t->left;
}
free(tmp);
tmp = NULL;
}
}
注意删除节点时,需要修改指针,并且保存这种修改,在C语言考虑使用二级指针,C++提供界面更友好且实现相同功能引用(实现自引用的指针常量)。