[英]Level Order Traversal of a tree
为了对通用树进行级别顺序(BFS)遍历,我为以下链接中提到的代码编写了以下显示函数。 问题是每个级别都打印两次。 有人可以告诉我为什么。 如果有人需要整个实现,则可以在下面的链接中找到没有此功能的原始代码,否则,请查看下面的displayBFS函数,并告诉我为什么值重复
谢谢!
void displayBFS(NaryTreeNode n)
{
Queue<NaryTreeNode> q = new LinkedList<NaryTreeNode>();
if(n!=null)
{
q.add(n);
System.out.println(n.data);
}
while(n!=null)
{
for(NaryTreeNode x:n.nary_list)
{
q.add(x);
System.out.println(x.data );
}
n = q.poll();
}
}
当前树形结构供参考:
root(100)
/ | \
90 50 70
/ \
20 30 200 300
输出:100 90 50 70 90 50 70 20 30 200 300 20 30
200
300
问题是您对根节点进行了两次处理:首先将其添加到队列中(在q.add(n)
),然后在首先到达n = q.poll()
进行处理。您可以将其从队列中取出并再次处理。
其他所有内容都是正确的,这就是为什么每个非根节点仅获得两个副本的原因:倍增在根仅发生一次。
要解决此问题,请删除q.add(n)
(因为无论如何,即使没有根节点,您都必须对其进行处理),否则请更改此行:
while(n!=null)
{
...
n = q.poll();
}
对此:
while((n = q.poll()) != null)
{
...
}
这样就不会在最初的额外时间里处理根节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.