Предзаказ обхода тройного дерева
Мне нужно выполнить предварительный обход троичного дерева. Я знаком с этим обходом двоичного дерева, например:
public void preorder(){
System.out.println(data);
if (left != null)
left.preorder();
if (right != null)
right.preorder();
}
Это происходит в порядке Root, Left, Right. Я не понимаю, как это сделать с добавлением среднего дочернего узла. Если бы кто-нибудь мог объяснить это, было бы здорово. Спасибо
2 ответа
Решение
Общий обход предзаказа n-арного дерева происходит следующим образом:
- Пройдите сам узел
- Если существует, переберите ребенка0
- Если существует, пройти ребенка1
- ...
- Если существует, переберите дочернийn
Бинарное дерево имеет только дочерний0 (слева) и дочерний1 (справа), но троичное дерево также имеет середину. Таким образом, ваш обход будет иметь дополнительное утверждение между обходом левого и правого поддерева:
if (middle != null)
middle.preorder();
Траверс среднего узла между левым и правым узлом
public void preOrder(Node node) {
if (node == null) {
return;
}
System.out.print(" " + node.data);
preOrder(node.left);
preOrder(node.middle);
preOrder(node.right);
}