我正在尝试编写一个遵循预遍历模式的预订遍历算法,并沿途获取元素并将其粘贴到ArrayList中以返回到控制台。
这是我到目前为止所确定的内容。
我真正在努力确定的是基本情况应该是什么?起初我认为如果我不能getRight()并且不能getParent()。getRight()然后我必须没有更多的节点来检查,但是对于具有如此多级别的大树,这在逻辑上是不起作用的。然后我想我可以使用一个计数器,当我检查并获取一个节点的元素时,我可以增加一个计数器并检查大小以取消继续迭代,但后来我尝试了它,这是非常有问题的,所以我想这不可能是正确的。
我应该如何设置我的两种方法来实现这一目标,更重要的是我应该将其用作基本案例。
谢谢。
答案 0 :(得分:0)
你应该在这里使用递归,而不是迭代。这个算法非常简单:
public void preorder(Node n, ArrayList<String> elementAccumulator) {
elementAccumulator.add(n.getValue());
if(n.getLeft() != null) { preorder(n.getLeft(), elementAccumulator); }
if(n.getRight() != null) { preorder(n.getRight(), elementAccumulator); }
}