无法从二进制搜索树中删除叶子
Can not delete a leaf from binary search tree
我已经从二进制搜索树bst中制成了叶子的 delete_node()
函数。这是delete_node()
函数的行为:
- 如果二进制搜索树是空的,它将通知您它是空的。
-
其他,如果那叶没有孩子,因此不需要进一步的委派。因此,指向该叶子的指针被删除,然后将其指向空。但是不幸的是该程序崩溃了。
这是delete_node()
函数:void BinarySearchTree :: delete_node(float deleted_key) { Node* deleted_node_address = return_node_address(deleted_key); if(root == NULL) cout<<"The tree is empty, No thing to deleten"; else if(deleted_node_address->left_ptr==NULL && deleted_node_address->right_ptr==NULL) { cout<<"The element has no children, No linking requiredn"; delete deleted_node_address; deleted_node_address = NULL; } }
这是return_node_address
函数:
Node* BinarySearchTree ::return_node_address(float req_key,Node *traverse_ptr)
{
if(traverse_ptr==NULL)
{
cout<<"There is no data to return its addres";
return NULL;
}
else if(traverse_ptr->key == req_key)
{
return traverse_ptr;
}
else if(req_key < traverse_ptr->key && traverse_ptr->left_ptr != NULL)
{
return_node_address(req_key, traverse_ptr->left_ptr );
}
else if(req_key > traverse_ptr->key && traverse_ptr->right_ptr!= NULL)
{
return_node_address(req_key, traverse_ptr->right_ptr);
}
else
{
cout<<"The Key You Entred Is Not Found in The Tree";
return NULL;
}
}
分配
deleted_node_address=NULL;
清除deleted_node_address
变量,该变量是BinarySearchTree :: delete_node(float deleted_key)
函数本地的,但它确实不是清除了从其父节点中删除的节点的指针。
因此,您使树无效:它保留在某些left_ptr
或某些right_ptr
不为无效的情况下,但指向非对象。因此,下一次尝试访问指向未使用的内存的尝试可能发生崩溃。
此外,您调用return_node_address()
函数将节点搜索到之前删除>您测试root==NULL
。您确定return_node_address
方法是否为无效 - ?
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- C++中的线程安全删除
- 无法从二进制搜索树中删除叶子
- 从二叉搜索树问题中删除叶子