포인터를 사용하여 수동으로 이진 트리를 구현해야하는 할당이 있습니다. 내 나무는 두 자녀와 함께 삭제 될 때까지 잘 작동합니다. 그 시점에서 내가 끝내는 것은 올바른 항목이 제거되고 올바른 항목이 제거 된 항목의 위치에 놓이게되지만 왼쪽 자식이 잘못된 포인터가되어 결국 내가 알아낼 수 없게됩니다. 이것을 망쳐 놓고있다. 이 코드는 과제이므로 여기에 모든 코드를 게시하고 싶지는 않지만 여기에 문제가있는 코드가 있습니다. 누군가가 나를 위해 코드를 작성하지 않고 실수를 저질렀다는 것을 알려 주시면 정말로 감사하겠습니다. 또한 내가 테스트하고있는 트리는 대략 이와 비슷하게 보이고 노드 3을 제거하려고합니다. 노드 2가 있어야하지만 노드 2는 노드 2입니다.이 경우이 문제를 해결하는 방법을 알 수 있습니다. 하지만 대체 노드가 직접적인 자식이 아니 었으면 엉망이되어서 내가 뭘 잘못하고 있는지 보지 못했습니다. 내가 잘 이해하거나 문제를 해결 가까이 오지 않는다 이론에 대한 중 회담를 참조 모든 때문에 어떤 도움바이너리 트리에서 두 개의 하위 삭제
5
/ \
3 7
/\ /\
2 4 6 8
/
3.5
temp = delItem->left;
back = delItem;
while(temp->right != NULL)
{
back = temp;
temp = temp->right;
}
returnItem->m_dValue = delItem->m_dValue;
returnItem->m_dWeight = delItem->m_dWeight;
returnItem->m_iType = returnItem->m_iType;
strcpy(returnItem->m_sDesc,delItem->m_sDesc);
strcpy(returnItem->m_sItemName,delItem->m_sItemName);
returnItem->left = delItem->left;
returnItem->right = delItem->right;
delItem = temp;
delItem->left = returnItem->left;
delItem->right = returnItem->right;
returnItem->left = NULL;
returnItem->right = NULL;
/*delItem->left = left;
delItem->right = right;*/
if(back == delItem)
{
back->left = temp->left;
}
else
{
back->right = temp->left;
}
temp->left = NULL;
temp->right = NULL;
delete temp;
return returnItem;
감사합니다. 이진 트리에서 항목을 제거 지미
당신이 변수를 사용하는 무엇 ? dWeight와 iType은 무엇을 의미합니까? 당신은 단지 "바이너리 트리 (binary tree)"또는 블랙 & 레드 (black & red) 또는 AVL과 같은 특정 구현을 언급하고 있습니까? –