Уровни печати из двоичного дерева поиска

голоса
1

У меня есть бинарное дерево поиска структуры данных класса, который содержит узлы, которые являются объектами в стороне класс, который действует как бинарное дерево поиска.

Класс слишком долго, чтобы разместить здесь, но в основном это, как она работает. Если я хочу, чтобы напечатать верхнее значение BST, я бы сказал,

print (self._root)

Если бы я хотел, чтобы перейти к левой стороне дерева (то же самого с идти вправо, просто поставить прямо, а не слева), я бы сказал,

print (self._root._left)

Я надеюсь, что это достаточно, чтобы вы могли помочь мне с моей проблемой

Таким образом, на мою проблему, если у меня есть BST, как:

      6
     / \
    3   8
   / \   \
  1  4   10

Я хочу, чтобы иметь возможность распечатать:

6

3
8

1
4
10

Я написал рекурсивную функцию траверс:

def traverse(self):

        a = []
        self._traverse_aux(self._root, a)   
        return a

def _traverse_aux(self, node, a):

        if node is not None:
            self._traverse_aux(node._left, a)
            a.append(node._value)
            self._traverse_aux(node._right, a)
        return

Как всегда, это печатает значения в одном массиве:

[1, 3, 4, 6, 8, 10]

Как я могу получить его на печать так, как я хочу выше?

Задан 19/03/2014 в 14:51
источник пользователем
На других языках...                            


1 ответов

голоса
0

Оптимально, вы будете хотеть , чтобы ответить на этот вопрос рекурсивно. Этот тип обхода , в частности , называется в ширину. Вот некоторые замечания по обходу бинарных деревьев поиска , которые могут быть полезны для вас, хотя они находятся в Java.

Здесь также очень похож (возможно дублировать) вопрос, хотя в противоположности решения рекурсивно решения даются с помощью петель.

Ответил 19/03/2014 в 15:08
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more