2015-12-14 24 views
0

我想從具有兩個孩子的二元搜索樹中刪除一個節點。一切正常,因爲我寫了它,但刪除min後,我試圖打印樹時遇到問題。我的算法有什麼問題嗎?二元搜索樹刪除兩個孩子

void BST::DeleteTwoChild(Node * Current, Node * Parent) 
{ 
    // Declare min 
    Node * min = Current; 
    Node * minParent = NULL; 
    // Loop until minimum value is found 
    while (min->Right != nullptr) 
    { 
     minParent = min; 
     min = min->Right; 
    } 
    while (min->Left != nullptr) 
    { 
       minParent = min; 
       min = min->Left; 
    } 

    // Copy contents of min to Current (Node info being deleted) 
    Current->Data = min->Data; 
    Current->Frequency = min->Frequency; 

    // Delete the duplicate (min) 
    delete min; 
} 

編輯: 解決方案是增加minParent->Left = nullptr;delete

回答

0

你不應該刪除分鐘,如果任何其他節點仍然指向它。通常你會首先將該指針設置爲NULL。

+0

這解決了我的問題。謝謝 – Darkstorm51

+0

@ Darkstorm51歡迎來到StackOverflow - 如果這是正確的答案,請點擊它的複選標記。 –

0

很難肯定地說,因爲你沒有提供MCVE,但嘗試之前delete運營商增加

minParent->Left = nullptr;