二叉树节点删除问题

死咸鱼的成长之路 2017-11-14 01:44:15
一个树的创建
private:
struct Node
{
Key key;
Value value;
Node *left;
Node *right;
Node( Key key , Value value )
{
this->key = key;
this->left = this->right = NULL;
}
};
Node* root;
int count;

Node*removemininum(Node* node){
if( node->left == NULL ){
Node* rightNode = node->right;
delete node;
count --;
return rightNode;
}
node->left = removemininum(node->left);
return node;
}
上面这个函数是视频给的 功能是删除树中最小值所在的节点 能成功运行 但是我想改一下 如下:
void removemininum(Node* node){
if( node->left == NULL ){
Node* rightNode = node->right;
delete node;
count --;
}
removemininum(node->left);
}
虽然编译没报错 但是运行有错误

调试也显示以下提示:

这两个函数传进的实参都是整棵树的根节点 但是为什么必须要返回 函数功能是删除最大值的节点 那么找到最大值所在的节点然后要么直接delete释放 如果有孩子就改变此节点的父节点指针指向的位置不就行吗 。 我这个想法错在哪里 大佬指点
...全文
254 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
EmberWn 2017-11-16
  • 打赏
  • 举报
回复
左节点为空,你直接删掉了该节点,没有返回的话,它的右节点就丢失了。
paschen 版主 2017-11-14
  • 打赏
  • 举报
回复
点那个中断按钮断下来,通过调用堆栈定位到相关代码,观察分析原因,必要时可单步跟踪程序运行
赵4老师 2017-11-14
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧