2012-03-30 35 views
2

我有一個任務,需要用指針手動實現二叉樹。我的樹工作很好,直到刪除兩個孩子。我最終得到的是正確的項目被刪除,並將正確的項目,以取代刪除的項目,但我結束了左邊的孩子是一個不正確的指針本身,我無法弄清楚我在哪裏我搞砸了。我不想發佈所有的代碼,因爲這是一個任務,但這裏是有問題的代碼。如果有人能夠請我指出我犯了我的錯誤,而不是隻爲我做代碼,我會非常感激。此外,我測試的樹看起來大致是這樣的,我試圖刪除節點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; 

感謝您的幫助,因爲我看到的一切有關的理論,我明白就好了,或者不接近固定問題要麼會談。

吉米

+0

什麼是變量您正在使用? dWeight和iType意味着什麼?你是否僅僅指向「二叉樹」,或者指向特定的實現,如黑&紅或AVL? – 2015-07-09 08:46:51

回答

1

刪除從二叉樹的項目覆蓋在互聯網上的許多地方(和教科書)。

我會建議看看這些鏈接,因爲它們也提供代碼示例。理解算法是非常重要的,因爲它是一項任務,所以您應該瞭解它,並且可以在將來對其進行測試。

Binary search tree. Removing a node

Binary Tree – Deleting a Node

+0

我完全理解這個算法,並且已經對它進行了測試並做出了100個。我知道我正在嘗試做什麼。我試圖按照左側分支到最右側的項目,這是成功完成的。我也知道基於算法我想爲孩子設置哪些節點。我沒有看到的是我在做這件事時犯了什麼錯誤。我已經瀏覽了數十個網站和我擁有的所有書籍。這不是一個解釋問題。這是我設置一個指針錯了,我看不到發生了什麼。在發佈之前,我也在這兩個站點上 – Jimmy 2012-03-30 18:39:37