0
この機能に関する訂正をお願いします。問題は、ノードよりも多くのノードを削除することです。それは最初にすべての葉を削除していることを意味し、次にそれはちょうど作成された葉を削除しています。 訂正方法を教えてください。 リーフ=子ノードのないノード。バイナリ検索ツリーからすべてのリーフノードを削除する機能
typedef struct node {
int key;
node* left;
node* right;
}node;
void BST::DeleteLeafs()
{
if (root == nullptr)
throw InvalidOperationException();
else
deleteLeavesHelper(nullptr, root);
}
void BST::deleteLeavesHelper(node* parent, node* n)
{
if (n == nullptr)
return;
else
{
if (n->left == nullptr && n->right == nullptr)
{
n = nullptr;
if (parent != nullptr)
{
parent->left = nullptr;
parent->right = nullptr;
}
}
else
{
deleteLeavesHelper(n, n->left);
deleteLeavesHelper(n, n->right);
}
}
}
ありがとうございました。私はそれを修正し、それは動作します。 –
しかし別の問題があります。この関数はwhileループで(デストラクタ内で)呼び出されます。最後にルートを削除することになっています(ルートがリーフノードになるとき)が、ルートは削除されません。あなたはそれのためにいくつかの解決策を教えていただけますか? –
それをデバッグして、ルートが削除されない理由を確認してください。 – user31264