在web上有打印值的解决方案,如下所示:
void printPostorder(Node node)
{
if (node == null)
return;
// first recur on left subtree
printPostorder(node.left);
// then recur on right subtree
printPostorder(node.right);
// now deal with the node
System.out.print(node.key + " ");
}
但我的问题是,我不想打印这些值,而是把它们放在ArrayList
中。这一部分很容易,我曾尝试使用ArrayList.add
而不是System.out.print
,但我的困难是我想返回它,所以我的返回类型将是ArrayList
而不是void
。问题是,我不知道在基本情况下返回什么:
if (node == null)
return;
我的方法确实返回了一个ArrayList
,那么对于上面的基本情况,我能返回什么呢?
在最后的情况下,您可以返回一个空列表,并通过调用addAll
:来累积结果
List<Node> getPostOrderList(Node node) {
List<Node> retVale = new ArrayList<>();
if (node == null) {
return retVal;
}
// first recur on left subtree
retVal.addAll(getPostOrderList(node.left));
// then recur on right subtree
retVal.addAll(getPostOrderList(node.right));
// now deal with the node
retVal.add(node);
return retVal;
}