Предположительно, вы знаете, как обходить бинарное дерево по порядку, используя рекурсию.
void visit(Node node) {
if(node.hasLeft()) {
visit(node.getLeft());
}
handleValue(node.value); // print or whatever
if(node.hasRight()) {
visit(node.getRight());
}
}
Вы заметите, что когда вы делаете это, вы уже обрабатываете листья в порядке слева направо, в дополнение к обработке нелистовых узлов.
Чтобы посетить справа налево, просто измените порядок операторов — так что посетите справа, затем обработайте значение, а затем посетите слева.
Чтобы напечатать только листовые узлы, вам просто нужно поместить оператор if
вокруг handleValue
, указав, что он будет выводить только в том случае, если узел является листом. Узел является листом, если он не имеет ни левого, ни правого дочернего узла.
person
slim
schedule
15.08.2017