二叉树递归插入错误

时间:2012-11-25 14:16:33

标签: c++ pointers tree binary-tree

我有这个方法在二叉树中添加一个节点,在这个示例中,我首先添加4,哪个正常,然后当我添加10时,我得到了这个: enter image description here

它首先检测到top != NULL是正确的,因为有4个然后在参数中调用top->droite的方法(top->right)。当它没有检测到top为NULL并跳过时,它就变成了你在屏幕截图中看到的内容。你可以看到varibale是NULL。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

通过查看其余的调试信息,我们可以看到新节点的左右指针是0xcdcdcdcd,据我所知,这是调试的未启动指针的标准值在Visual Studio中构建。

您的错误未初始化新节点的指针。以下是发生的事情:

开始时topNULL,您插入nbr为4的节点。新的顶部是nbr为4的节点,但是指向基本垃圾的两个指针。

当您尝试插入10时,它将正确地将10与4进行比较,并尝试在右子树4中插入10.此右子树未初始化,因此错误。

解决这个问题的一种方法是使代码如下:

static void insertion(Noeud *&top, Noeud *newNoeud) {
   if (top == NULL) {
       top = newNoeud;
       top->droite = NULL;
       top->gauche = NULL;
   } else if (newNoeud->nbr < top->nbr)
       insertion(top->gauche, newNoeud);
   else
       insertion(top->droite, newNoeud);
}

以下是一个完整的示例:http://ideone.com/5TDD49