【发布时间】:2018-03-04 08:10:30
【问题描述】:
我从二叉搜索树 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 delete\n"; else if(deleted_node_address->left_ptr==NULL && deleted_node_address->right_ptr==NULL) { cout<<"The element has no children, No linking required\n"; 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是否为非空,所以这是一个很好的候选者
标签: c++ binary-tree nodes