级别顺序树打印中的Java缩进,而不是二叉树

时间:2017-05-03 12:48:29

标签: java tree indentation traversal

我想用水平顺序遍历打印非二叉树。在下面的代码中,每次添加一组新的子项时都会缩进,但是当我再次返回树中时,我需要以某种方式删除缩进。这是树的打印方式:

Root
  Home
    HomeChild1
    HomeChild2
    Documents (should be same level as Home)
      DocumentChild1
      DocumentChild2
      Downloads (should be same level as Home and Documents)
        DownloadsChild1

代码:

queue.add(o);  //root
        int indent = 0;
        while(!queue.isEmpty(){

            for(int i=0; i<indent; i++){
                print("  ");
            }

            Object tempObj = queue.remove(o);
            print(tempObj.value);

            if(tempObj.children != null){
                //Adding all childrens, since its not a binary tree I loop throught all children
                for(int i=0; i<tempObj.children.length; i++){
                    queue.add(0, tempObj.children[i];
                }
                indent++;
            }
        }

这就是我希望它看起来像

Root
  Home
    HomeChild1
    HomeChild2
  Documents
    DocumentChild1
    DocumentChild2
  Downloads
    DownloadsChild1

2 个答案:

答案 0 :(得分:1)

当您开始处理子项时,您需要增加缩进,然后在到达一组子项的末尾时递减它。

你最好使用递归调用而不是队列来完成整个事情。队列增加了很多复杂性而没有帮助。

类似的东西:

recurseTree(Thing obj, String indent) {
    print(indent+obj.value);
    if (obj.children != null) {
       for (Thing child: obj.children) {
          recurseTree(child, indent+"   ");
       }
    }
}

你可以在这里进行一些优化(例如只进行一次字符串连接),你需要做一些整理,但这应该为你提供所需的基本框架。

使用

启动它
recurseTree(root, "");

答案 1 :(得分:0)

您永远不会重置缩进值。 您需要复制其值,以便在经过一组孩子后可以恢复它

顺便说一句,如果你尝试一些递归的东西,那就更容易处理了。