请帮我在代码中找到错误。 在这个程序中,我创建了一个二叉树,我想使用队列按层次顺序遍历。
我的输出在打印第一个父root后卡住。我认为我在队列函数中犯了一些错误。但是我没有发现任何错误。
这是我的代码:
SELECT TOP 50000 X FROM Y ORDER BY NEWID()
答案 0 :(得分:1)
你的入队函数被破坏了:你继续循环直到ptr
为NULL
,但在循环内你根本不改变ptr!
while(ptr!=NULL)
{
if(ptr->next==NULL)
{
ptr->next=new_node;
new_node->next=NULL;
}
}
相反,你必须在每次迭代时都在列表中前进,直到你到达终点:
while(ptr!=NULL)
{
if(ptr->next==NULL)
{
ptr->next=new_node;
new_node->next=NULL;
break;
}
ptr = ptr->next;
}
这应该可以解决无限循环。
此外,您应该将new_node->next
的初始化直接移至malloc()
之后,以便在start == NULL
的情况下初始化{<1}}:
new_node=(struct queue*)malloc(sizeof(struct queue));
new_node->next = NULL;
if(start==NULL)
start=new_node;
答案 1 :(得分:0)
level_order应该对自身进行递归调用,而不是enqueue()。