如何有效地返回同一级别的树

时间:2011-09-29 17:23:05

标签: algorithm

我有一个带有实现此接口的节点的树 接口节点{
    public boolean hasChildren(){};

}

如何返回具有相同treeLevel的List列表?
例如,如果我有一个像树的树         1
    2 3
   4 5 6 7

我将返回一份列表,如{{1} {2,3} {4,5,6,7}} 感谢。

1 个答案:

答案 0 :(得分:0)

这基本上是breadth-first traversal,除了在每个级别保存该级别的列表。像这个例子C#代码:

 IEnumerable<Node[]> Traverse(Node root) {
      Node[] currentLevel = new [] { root };
      Node[] nextLevel = null;
      while(true) { 
          nextLevel = currentLevel.SelectMany(n => n.Children).ToArray();
          if (nextLevel.Length > 0) {
             yield return nextLevel;
             currentLevel = nextLevel;
          } 
          else { 
              break;
          }
      }
 }