私はBSTからリーフの削除機能を作成しました。 BSTが空の場合、BSTが空であることを通知します。そうでなければ、いくつかのケースがあります。それらの1つは、ノード(リーフ)に子がないことです。したがって、他のノードとのさらなるリンクは必要ありません。最初に、そのリーフを指しているポインタを削除し、nullを指し示すようにします。しかし、プログラムは残念なことにクラッシュしました。ここ は関数である。ここでバイナリ検索ツリーからリーフを削除する
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 0;
}
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 0;
}
}
デバッガでプログラムを起動し、1行ずつステップ実行するまでの時間。 – user0042
QTを使用しています。そのデバッガは動作しません!! – Ahmed
それを稼働させてください。通常はそうです。 – user0042