我有一个需要手动实现带指针的二叉树的赋值。我的树很有效,直到删除两个孩子。我最后得到的是删除了正确的项目,并且正确的项目被放置在已移除的项目的位置,但我最终得到的左边的孩子是一个不正确的指针,我无法弄清楚我在哪里我搞砸了。我不想发布所有代码,因为这是一个赋值,但这里是有问题的代码。如果有人可以请我指出我犯错误的地方,而不仅仅为我做代码,我真的很感激。我测试的树看起来大致如此,我试图删除节点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 :(得分:1)
通过互联网(和教科书)的许多地方都可以涵盖从二叉树中删除项目。
我建议您查看这些链接,因为它们也提供了代码示例。了解算法是非常重要的,因为它是一个赋值,你应该知道它,并且可以在将来对它进行测试。