从二叉搜索树中删除节点
deleting node from a binary search tree
我正在尝试创建一个函数来从二叉搜索树中删除节点。 我得到了第三种情况,节点有 2 个孩子在工作,但我的代码不起作用,节点有 1 个或没有孩子。
这是我直接从书中复制的代码。我从书中得到的这个代码是错误的吗?
template <class elemType>
void bSearchTreeType<elemType>::deleteFromTree
(nodeType<elemType>* &p)
{
nodeType<elemType> *current; //pointer to traverse the tree
nodeType<elemType> *trailCurrent; //pointer behind current
nodeType<elemType> *temp; //pointer to delete the node
if (p == NULL)
cout << "Error: The node to be deleted is NULL."
<< endl;
else if (p->lLink == NULL && p->rLink == NULL)
{
temp = p;
p = NULL;
delete temp;
}
else if (p->lLink == NULL)
{
temp = p;
p = temp->rLink;
delete temp;
}
else if (p->rLink == NULL)
{
temp = p;
p = temp->lLink;
delete temp;
}
你确定你的代码在 2 个孩子身上完美运行吗?因为您提供的上述代码片段仅处理 3 种情况:(1) 没有孩子,(2) 左 ptr 指向 1 个孩子,(3) 右 ptr 指向的 1 个孩子......最后一个案例,有 2 个孩子,根本不存在......
所以回答你的问题:是的,你提供的上面的代码似乎是错误的(又名不完整)。
我设法追踪了您使用的来源。上面显示的函数中是否有以下代码(附加到else if
流之后),或者它不存在?
else
{
current = p->llink;
trailCurrent = NULL;
while(current->rlink != NULL)
{
trailCurrent = current;
current = current->rlink;
} //end while
p->info = current->info;
if(trailCurrent == NULL) //current did not move;
//current == p->llink; adjust p
p->llink = current->llink;
else
trailCurrent->rlink = current->llink;
delete current;
}//end else
相关文章:
- 为什么我的删除节点函数实际上没有删除节点?
- 为什么"delete"关键字不删除节点?
- 以递归方式从链表中删除节点
- 根据 Pugixml 中的子值删除节点
- 基于给定字符串数据类型的链表删除节点
- 在双向链表中给定节点之后删除节点
- 如何在单链列表 c++ 中正确删除节点
- 在BST堆中删除节点免错误
- 为什么我的打印功能之一删除节点
- 重载运算符>>从二叉树中删除节点
- 删除节点方法实际上不会删除二叉搜索树中的节点.C++
- C bST删除节点会破坏排序算法
- 删除节点并处理新的 nullptr 和链接节点
- 如何从链表中删除节点
- 如何在用于删除节点的函数中检查我的链表是否C++为空
- 从BST删除节点时出错
- 二叉树,从树中删除节点后将其删除
- 链接列表删除节点C
- 在二进制搜索树中删除节点
- 使用类从双向链表中删除节点