Предположительно вы знаете, как пройти через двоичное дерево в порядке рекурсии.
void visit(Node node) {
if(node.hasLeft()) {
visit(node.getLeft());
}
handleValue(node.value); // print or whatever
if(node.hasRight()) {
visit(node.getRight());
}
}
Вы заметите, что когда вы сделаете это, вы уже обрабатывает листья в левой направо порядке, в дополнение к обработке без листьев узлов.
Чтобы посмотреть справа налево, просто отмените порядок инструкций - так что посетите правую сторону, затем обработайте значение, затем перейдите налево.
Чтобы напечатать только листовые узлы, вам просто нужно поставить оператор if
около handleValue
, указав его только для вывода, если узел является листом. Узел - это лист, если он не имеет ни левого, ни правого дочернего узла.
Этот код будет печатать нелистовые узлы и будет печатать листовые узлы дважды. – Sildoreth
Я вижу, как он напечатал бы дважды. Исправлена. – Tombala
большое спасибо, ребята! Я действительно ценю ваше время и силы! – ronnie