我有一個任務,需要用指針手動實現二叉樹。我的樹工作很好,直到刪除兩個孩子。我最終得到的是正確的項目被刪除,並將正確的項目,以取代刪除的項目,但我結束了左邊的孩子是一個不正確的指針本身,我無法弄清楚我在哪裏我搞砸了。我不想發佈所有的代碼,因爲這是一個任務,但這裏是有問題的代碼。如果有人能夠請我指出我犯了我的錯誤,而不是隻爲我做代碼,我會非常感激。此外,我測試的樹看起來大致是這樣的,我試圖刪除節點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意味着什麼?你是否僅僅指向「二叉樹」,或者指向特定的實現,如黑&紅或AVL? – 2015-07-09 08:46:51