预订遍历基础案例

时间:2018-03-23 11:31:27

标签: java tree binary-search-tree

我正在尝试编写一个遵循预遍历模式的预订遍历算法,并沿途获取元素并将其粘贴到ArrayList中以返回到控制台。

这是我到目前为止所确定的内容。

  1. 这是一个迭代问题,我需要继续使用方法迭代树来获取和返回元素。
  2. 我需要一个基本案例来终止方法的迭代并返回数组列表。
  3. 我需要两个方法,一个用于检查基本情况,如果没有完成,则激活另一个迭代方法并将元素放入数组列表。
  4. 我真正在努力确定的是基本情况应该是什么?起初我认为如果我不能getRight()并且不能getParent()。getRight()然后我必须没有更多的节点来检查,但是对于具有如此多级别的大树,这在逻辑上是不起作用的。然后我想我可以使用一个计数器,当我检查并获取一个节点的元素时,我可以增加一个计数器并检查大小以取消继续迭代,但后来我尝试了它,这是非常有问题的,所以我想这不可能是正确的。

    我应该如何设置我的两种方法来实现这一目标,更重要的是我应该将其用作基本案例。

    谢谢。

1 个答案:

答案 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); }

}