Предварительный обход дерева квадрантов

Итак, я знаю, что для бинарного дерева общий способ обхода предварительного порядка выглядит так:

void displayPreOrder(TreeNode node)
{
    if(node != null)
    {
        displayPreorder(node.left);
        displayPreorder(node.right);
        System.out.println(node.value);
    }
}

Но у меня возникли проблемы с попыткой обдумать предварительный обход дерева квадрантов. Я пытался найти некоторые ресурсы, но ушел с пустыми руками. Любой намек?


person Community    schedule 01.11.2016    source источник


Ответы (1)


Код, который вы разместили, предназначен для обхода post порядка двоичного дерева. Для дерева квадрантов вам просто нужно посетить всех детей, а не только слева и справа.

Для простоты я предполагаю, что TreeNode определяет метод children(), который возвращает итератор или List дочерних элементов узла в некотором четко определенном порядке. Если это недоступно, просто переберите дочерние элементы, используя любой доступный механизм.

void displayPreOrder(TreeNode node)
{
    if(node != null)
    {
        // visit the root first for pre-order
        System.out.println(node.value);
        for (TreeNode child : node.children()) {
            displayPreorder(child)
        }
    }
}

(P.S. Это работает и для бинарных деревьев, учитывая правильный механизм итерации.)

person Ted Hopp    schedule 01.11.2016
comment
Большое спасибо! - person ; 01.11.2016