我有些困惑于分段错误,因为我不明白为什么会出现这种情况。我正在尝试遍历一棵已经构建好的树,而且测试也通过了。但是,当我尝试运行下面的函数时,就会出现分段错误。请问有人能告诉我为什么会出现分段错误以及如何避免这种情况吗?谢谢。
void traverse(Node *root)
{
Node *pointer;
Node *pre;
if(root == NULL)
return;
pointer = pre;
while(pointer != NULL)
{
if(pointer->leftChild != NULL)
pointer = pointer->rightChild;
else
{
pre = pointer->leftChild;
while(pre->rightChild != NULL && pre->rightChild != pointer)
pre = pre->rightChild;
if(pre->rightChild != NULL)
{
pre->rightChild = pointer;
pointer = pointer->leftChild;
}
else
{
pre->rightChild = pointer;
pointer = pointer->leftChild;
}
}
}
}
pointer
或pre
,基本上完全忽略了你传入作为参数的root
节点,因此你尝试在未定义/未初始化的结构体中取消引用指针。 - Marc B