62,053
社区成员
发帖
与我相关
我的任务
分享
void printNode(List<Node> container)
{
if(container.Count>0)
{
var node= container[0];
container.RemoveAt(0);
foreach(var n in 查询某个节点的下一层子结点(node))
container.Add(n);
printNode(container);
}
}
看代码比较繁琐,实际上一说就明白了:对于个待扩展的节点列表,我们从头部取出一个节点,然后把它的下一层子结点找出来,全都添加到这个列表的末尾等待以后再扩展,然后递归重复这个扩展过程!
这样就能宽度优先地处理所有结点了!
一眼验证这个程序是正确地,最后,我们把尾递归的那条代码改为代码 “goto begin;” 就成了循环了。
printNode(Node node)
{
printTitle(node.title)
foreach (Node child in node.children)
{
printNode(child); //<-- recursive
}
}