Обход дерева InOrder - PullRequest
       32

Обход дерева InOrder

2 голосов
/ 31 октября 2011

Как я могу реализовать обход InOrder для этого вида дерева? Мне нужно напечатать операторы тоже (как 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;
    }
}

Tree

        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 голосов
/ 31 октября 2011

Канонический способ реализовать это - просто выполнить рекурсию по дереву.
Сначала вы должны рекурсивно пройти по левому поддереву, затем вывести оператор, а затем рекурсивно пройти по правому поддереву.

Более продвинутой реализацией было бы использование шаблонов проектирования Iterator и Visitor, но, поскольку это вопрос домашнего задания, я предполагаю, что это выходит за рамки вашего назначения.

...