两个孩子在二叉树删除

时间:2012-03-30 17:44:13

标签: c++

我有一个需要手动实现带指针的二叉树的赋值。我的树很有效,直到删除两个孩子。我最后得到的是删除了正确的项目,并且正确的项目被放置在已移除的项目的位置,但我最终得到的左边的孩子是一个不正确的指针,我无法弄清楚我在哪里我搞砸了。我不想发布所有代码,因为这是一个赋值,但这里是有问题的代码。如果有人可以请我指出我犯错误的地方,而不仅仅为我做代码,我真的很感激。我测试的树看起来大致如此,我试图删除节点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;

感谢您提供任何帮助,因为我看到的所有内容都是关于理论的,我理解得很好或者没有接近解决问题。

1 个答案:

答案 0 :(得分:1)

通过互联网(和教科书)的许多地方都可以涵盖从二叉树中删除项目。

我建议您查看这些链接,因为它们也提供了代码示例。了解算法是非常重要的,因为它是一个赋值,你应该知道它,并且可以在将来对它进行测试。

Binary search tree. Removing a node

Binary Tree – Deleting a Node