C++ 二叉树上的两个子删除

C++ 二叉树上的两个子删除,c++,C++,我有一个任务,需要手动实现带有指针的二叉树。我的树非常好,直到有两个孩子的时候。在这一点上,我最终得到的是正确的项目被删除,并且正确的项目被放置在删除的项目的位置,但是我最终得到的结果是,左边的子项是一个指向自身的错误指针,我不知道我在哪里搞砸了。我不想发布所有的代码,因为这是一个任务,但下面是有问题的代码。如果有人能告诉我,我在哪里犯了错误,而不只是为我做代码,我会非常感激。另外,我正在测试的树大致如下所示,我正在尝试删除节点3。节点2按其应有的方式就位,但左侧的节点2是节点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;
谢谢你的帮助,因为我看到的每一件事都是关于理论的,我完全理解这个理论,或者根本无法解决这个问题


Jimmy

从二叉树中删除项目在互联网(和教科书)的许多地方都有介绍

我建议看一下这些链接,因为它们也提供了代码示例。理解算法是非常重要的,因为它是一项作业,所以希望您了解它,并在将来对其进行测试


我完全理解该算法,并且已经在其上进行了测试并获得了100分。我也知道我想做什么。我试图沿着左分支到最右边的项目,这是成功的。根据算法,我还知道要为孩子们设置哪些节点。我没有看到的是我在做那件事时犯了什么错误。我浏览了几十个网站和我所有的书。这不是一个解释问题。这是因为我设置了一个错误的指针,我看不到这是在哪里发生的。在发布之前我也在这两个网站上,你使用的变量是什么?什么是dWeight和iType?你指的是“二叉树”还是像black&red或AVL这样的特殊实现?