中序遍历树

3

我该如何在这种类型的树上实现中序遍历?我还需要打印运算符(例如3-2-1)。

我有以下这些类:

public class BinaryOperator extends Value {
    private Value firstOperand;
    private Value secondOperand;
    private String operator;

    public BinaryOperator(Value firstOperand, Value secondOperand,
            String operator) {
        this.firstOperand = firstOperand;
        this.secondOperand = secondOperand;
        this.operator = operator;
    }
}

public class Number extends Value {
    private Integer value;

    public Number(Integer value) {
        this.value = value;
    }
}

        Root
         /\
        /  \
       BO  Num
       /\
      /  \
    BO OP Num
    /\
   /  \
Num OP Num

explanation:
- BO: binary operator - consists of two children which may be Num or another BO
- Num: just a number
- OP: operation like +-... 
1个回答

3
实现这个的规范方法是简单地对树进行递归。首先递归遍历左子树,然后打印运算符,再递归遍历右子树。
更高级的实现方法是使用迭代器和访问者设计模式,但由于这是一道作业问题,我假设这超出了你的任务范围。

我想实际使用迭代器。将元素放入数组中然后读取它们是一种好的遍历方式吗? - user219882
好问题!缺点是在遍历时无法删除元素。我更喜欢在每个节点中使用指向父节点的链接,但这样做会导致额外的维护工作。 - S.L. Barth
由于我不需要支持“删除”操作,所以我使用了最简单的方法来完成它。谢谢... - user219882

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接