void Insert(AVLnode * & root, string X)
{
if ( root == NULL)
{
root = GetNode(X);
}
else if ( root->info > X )
{
Insert(root->left,X);
if ( height(root->left) - height(root->right) == 2 )
if ( X < root->left->info )
RotateRR(root);
else
RotateLR(root);
}
else if ( root->info < X )
{
Insert(root->right,X);
if ( height(root->right) - height(root->left) == 2 )
if ( X > root->right->info )
RotateRR(root);
else
RotateLR(root);
}
root->height = max( height(root->left), height(root->right) )+1;
}
AVLnode* find(AVLnode* root,string X)
{
if (!root) return 0;
if ( root->info == X )
return root;
else if (root->info < X)
find(root->left,X);
else if (root->info > X)
find(root->right,X);
return 0;
}
int main(int argc,char* argv)
{
AVLnode* Dic;
Insert(Dic,"adf");
return 0;
}
第一次在Insert
中,root
为NULL,但在调试时,它会跳过root == null
。发生了什么事?
答案 0 :(得分:2)
问题出在AVLnode* Dic;
的{{1}}声明中。您正在从main()
向insert()
发送未初始化的指针。它包含垃圾值。将其初始化为main()
答案 1 :(得分:1)
第一次它不是NULL。变量在C ++中不会自动初始化为NULL或0;它们包含垃圾(无论它们占用的内存地址是什么)。
将AVLnode* Dic;
替换为AVLnode* Dic = NULL;
,然后重试。
答案 2 :(得分:1)
“第一次插入”,在您提供的代码中,root
是一个“随机”-ish值,因为您永远不会初始化Dic
- 因此它可能恰好为NULL当你在没有调试器的情况下运行时,否则如果 使用调试器。这只是代码中的一个明确错误,因此在= 0
正文的第一行;
之前添加main
。在此之后,您可能会发现更多错误(很难说,因为您没有向我们展示GetNode
或Rotate
内容,即使您执行向我们展示{{ 1}}从未调用过的函数 - 特别是为了向我们展示代码的选择。