如何改进:顺时针打印树?

时间:2019-01-29 19:44:55

标签: java tree children graph-traversal

所以我在一次Google电话采访中遇到了这个问题,他们希望我编写一种方法,该方法顺时针打印树的外部元素。示例:

                      1
                    / | \
                   4  5  7
                  /  /   /\
                 9   12 3 24
                  \
                  14

                    ^    |
                    |    v
                    |-<--|

            prints 1, 7, 24, 3, 12, 14, 9, 4   
            notice that 5 isnt printed because its not "out"

所以我想到了:

 TreeNode {
    int val;
    List<TreeNode> children;
 }


 void printTreeClockWise(TreeNode root) {

      if (root == null) return;
      System.out.println(root.val);
      printRight(root);   // recursively prints the outer right nodes
      printLeafs(root);   // recursively prints roots with .children.size() > 0
      printLeft(root);   //recursively prints the left outer nodes
 }

然后我实现了那些辅助功能,他说这很好。我的方法基本上重复到最左边/最右边/最下面的节点(到每面墙),然后打印。他说我的方法很好并且可以工作,但是如果现在树很大(无法容纳在内存中)并且它们来自我们的服务器,那怎么办,所以我不能“可靠地”等到整个树被加载然后打印出来。我将如何更新我的代码?我说过我可以添加一个布尔值,然后等到它成立,然后再尝试确定该节点是否适合打印,就像这样

 TreeNode {
    int val;
    List<TreeNode> Children;
    boolean noMoreChildrenUnder;
 }

然后他说,提示是添加指向父对象的指针。

    TreeNode parent;

然后我不知道父级指针可以帮助我什么。有什么想法可以使用父指针来实现这种打印,而无需阅读整棵树?或者我可以在这里使用任何优化?谢谢!

0 个答案:

没有答案