我有三个函数来managa二叉树:
static void insertion(Noeud* &top, Noeud *newNoeud)
{
if(top == NULL)
top = newNoeud;
else if(newNoeud->nbr < top->nbr)
insertion(top->left, newNoeud);
else
insertion(top->right, newNoeud);
}
static void affichage(Noeud* &top) //displaying
{
if(top != NULL)
{
affichage(top->left);
affichage(top->right);
cout << "\n" << top->nbr;
}
}
static Noeud* recherche(Noeud* &top, int nbr) //searching
{
while(top != NULL)
{
if(top->nbr == nbr)
return(top);
else if(nbr < top->nbr)
top = top->left;
else
top = top->right;
}
}
然而,我一直在收到错误消息,说我在尝试读取内存点时违反了访问权限。我猜这与我的指针有关,但我不知道它是什么。
答案 0 :(得分:1)
您的搜索方法使您的顶级节点不再指向top
。
答案 1 :(得分:1)
recherche
更改top
不应更改的内容。
这甚至编译了吗?
static Noeud* recherche(Noeud* &top, int nbr) //searching
{
while(top != NULL)
{
if(top->nbr == nbr)
return(top);
else if(nbr < top->nbr)
top = top->left;
else
top = top->right;
}
}
这并不总是返回一个值......
应该是这样的:
static Noeud* recherche(Noeud* &top, int nbr) //searching
{
Noeud* it = top; //use a temporary pointer for the search.
while(it != NULL)
{
if(it->nbr == nbr)
return(it);
else if(nbr < it->nbr)
it = it->left;
else
it = it->right;
}
return it; //always return a value.
}