二进制树级别顺序遍历使用队列?

时间:2016-04-27 18:00:49

标签: c binary-tree

请帮我在代码中找到错误。 在这个程序中,我创建了一个二叉树,我想使用队列按层次顺序遍历。

我的输出在打印第一个父root后卡住。我认为我在队列函数中犯了一些错误。但是我没有发现任何错误。

这是我的代码:

SELECT TOP 50000 X FROM Y ORDER BY NEWID()

2 个答案:

答案 0 :(得分:1)

你的入队函数被破坏了:你继续循环直到ptrNULL,但在循环内你根本不改变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()。