2

给定(树的)深度作为命令行参数,您如何实现遍历树的迭代并在该深度处停止,然后仅在该深度处按顺序打印节点?

树结构:

    Root:        A       (Depth)   0
              /     \
           C           B           1
         / | \        / \
        E  D  F      G   H         2

示例输出:深度 = 0 输出 = A

深度 = 1 输出 = B,C

深度 = 2 输出 = D,E,F,G,H

我知道遍历树结构的唯一方法是 while(iterator.hasNext()) 循环 - 但是,如果我尝试在此循环中打印树的节点,它将打印该级别的节点以及它前面的节点,这不是我想要的。

编辑:初始代码

    public static void main(String[] args)
    {
     int depth;
     BufferedReader input = null;

     try
     {
      input = new BufferedReader(new FileReader(args[0]));
      depth = Integer.parseInt(args[1]);

      String currentLine = "";
      TreeSet<String> lineSet;
      lineSet = new TreeSet<String>();
      while((currentLine = input.readLine()) != null)
      {
       lineSet.add(currentLine);   
      }
      Iterator<String> iterator;
      iterator = lineSet.iterator();
      while (iterator.hasNext())
      {
       System.out.println(iterator.next());
      } // while
     } // try
     catch(IOException exception)
     {
      System.err.println(exception);
     } // catch
     finally
     {
      try{ if (input != null) input.close(); }
      catch (IOException exception)
      { System.err.println("Could not close input " + exception); }
      } // finally
     } // main
4

2 回答 2

1

好吧,基本上你以广度优先顺序遍历树,直到你达到你想要的深度。然后开始打印出节点或将它们收集到列表/集合中,然后再打印出来。

于 2013-02-28T12:08:25.780 回答
0

你显然需要做一个BFS。但是,恐怕您无法TreeSet从 JDK 获得足够的内部结构或任何其他数据结构。

因此,您需要实现自己的树数据结构(或使用第三方库)。

于 2013-02-28T13:54:30.533 回答