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