二叉树节点删除问题
一个树的创建
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释放 如果有孩子就改变此节点的父节点指针指向的位置不就行吗 。 我这个想法错在哪里 大佬指点
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释放 如果有孩子就改变此节点的父节点指针指向的位置不就行吗 。 我这个想法错在哪里 大佬指点

...全文
相关推荐
C语言实现二叉树的创建、插入、删除、遍历等操作
C语言实现二叉树的创建、插入、删除、遍历(先序、中序、后续、深度优先、广度优先)、计算度为0,1,2的节点个数。 包括排序二叉树的实现
线索二叉树的插入,删除
一、内容 线索二叉树的应用。实现线索二叉树的建立、插入、删除、恢复线索的实现。
递归删除二叉树中以x为根的子树
今天小编就为大家分享一篇关于递归删除二叉树中以x为根的子树,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
二叉树的操作(建立、添加、删除、修改)
关于二叉树的基本操作,建立添加删除修改二叉树。
树 二叉树 各种操作 删除叶节点 返回宽度 高度 等
这是我们在学习数据结构是上机实践编的小程序,现在想和大家分享,上面实现了二叉树的各种操作,如返回叶节点,宽度,高度,各种形式的遍历,查找,本程序中用到了很多递归,虽然这些教材上都有,我还是传上来了.



