0
我有这样的方法来二叉树和在这里的例子中添加一个节点,我首先添加4这些作品的权利,那么,当我加10,我得到这个: 二叉树递归插入错误
它首先检测top != NULL
这是正确的,因为有4,然后在参数中调用top->droite
的方法(即top->right
)。当它没有检测到top
为NULL并跳过时,它就成为你在屏幕截图中看到的内容。正如你所看到的varibale是NULL。
我在做什么错?
我有这样的方法来二叉树和在这里的例子中添加一个节点,我首先添加4这些作品的权利,那么,当我加10,我得到这个: 二叉树递归插入错误
它首先检测top != NULL
这是正确的,因为有4,然后在参数中调用top->droite
的方法(即top->right
)。当它没有检测到top
为NULL并跳过时,它就成为你在屏幕截图中看到的内容。正如你所看到的varibale是NULL。
我在做什么错?
通过查看其余的调试信息,我们可以看到新节点的左侧和右侧指针是0xcdcdcdcd
,据我所知,它是Visual的调试版本的未启动指针的标准值工作室。
您的错误不是初始化新节点的指针。这里是正在发生的事情:
起初top
是NULL
,并插入其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