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; }} 注意删除节点时,需要修改指针,并且保存这种修改,在C语言考虑使用二级指针,C++提供界面更友好且实现相同功能引用(实现自引用的指针常量)。