从二叉搜索树中删除节点
Removing A Node From A Binary Search Tree
在下面的代码中,我尝试实现基本的删除操作。但是,在开始复杂的删除部分之前,我无法删除叶节点。我想它可以与定义变量的位置相关,但我无法解决它。任何想法将不胜感激。
我想删除节点的部分基本上是作为delete temp;
部分实现的(顺便说一下,如果我按delete[]temp;
插入它,它仍然不起作用)。
void remove(int value){
if(root==NULL)
cout<<"The list is empty!"<<endl;
else {
Node *temp=root;
while(temp!=NULL)
{
cout<<"Processing: "<<temp->data<<endl;
if(value==temp->data)
{
cout<<"Data verified"<<endl;
//DELETE ROOT
if(temp->left && temp->right) //If it has two children
{
cout<<"Root with two children"<<endl;
return;
}
if(temp->left || temp->right)
{
cout<<"Root with a single child"<<endl;
return;
}
else {
cout<<"Leaf node"<<endl;
delete temp;
return;
}
}
else if(value<temp->data){
if(temp->left)
temp=temp->left;
else
return;
}
else{
if(temp->right)
temp=temp->right;
else
return;
}
}
}
}
delete
运算符不会执行您认为它执行的操作。它的作用是将对象使用的内存标记为未使用,这意味着它可以再次使用(它也调用对象的析构函数,但这在这里无关紧要)。
它不会做的是修改指向已删除对象的任何指针,您必须自己执行此操作。
因此,该分支的正确代码必须访问已删除节点的父节点,并将其left
或right
字段(取决于已删除的节点)设置为 NULL
。只有这样,您才能实际delete
节点。
相关文章:
- 为什么我的删除节点函数实际上没有删除节点?
- 为什么"delete"关键字不删除节点?
- 以递归方式从链表中删除节点
- 根据 Pugixml 中的子值删除节点
- 基于给定字符串数据类型的链表删除节点
- 在双向链表中给定节点之后删除节点
- 如何在单链列表 c++ 中正确删除节点
- 在BST堆中删除节点免错误
- 为什么我的打印功能之一删除节点
- 重载运算符>>从二叉树中删除节点
- 删除节点方法实际上不会删除二叉搜索树中的节点.C++
- C bST删除节点会破坏排序算法
- 删除节点并处理新的 nullptr 和链接节点
- 如何从链表中删除节点
- 如何在用于删除节点的函数中检查我的链表是否C++为空
- 从BST删除节点时出错
- 二叉树,从树中删除节点后将其删除
- 链接列表删除节点C
- 在二进制搜索树中删除节点
- 使用类从双向链表中删除节点