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