2013-05-16 3 views
2

Я пытаюсь реализовать двоичное дерево, и для облегчения отладки я хочу, чтобы иметь возможность печатать дерево, чтобы оно на самом деле выглядело как дерево. Например:Печать двоичного дерева в Java

   50 
     42    71 
    31  45  60  98 
6 11 43 49 55 

Или что-то подобное. (Дерево всегда гарантировано.) Мне просто нужен алгоритм или псевдокод, чтобы начать меня. Я просто понятия не имею, как реализовать что-то подобное. Спасибо за помощь.

+0

Вы смотрите на обход уровня. –

ответ

-1

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

Его можно лучше всего реализовать с помощью рекурсии.

Пробуйте link для примера кода и объяснений.

+0

Упс! Я знал это. Я просто составлял цифры для иллюстрации. Я починил это. Я не думаю, что код в ссылке, которую вы мне дали, относится к моей проблеме. Видимо, никто не хочет делать это с Двоичными деревьями. :/ – thePurpleMonkey

+0

Не хотите ли вы хранить данные в виде дерева, просто хотите распечатать его, как дерево? – Ric

+0

Данные _is_ хранятся как дерево, я просто не могу понять, как печатать его, как дерево. – thePurpleMonkey

-2

Я попробую и сделаю это: (Получил свободу использования Python 2.x, а не псевдокода).

# Doesn't work yet. 
# Assumes two characters ('42', '06' etc) per string representation of number. 
# If not, alter the formatting %02d as appropriate. 
global line_length 
line_length=80 
def pad(number_of_nodes): 
     global line_length 
     return "_"*(line_length/number_of_nodes) 

def printlevel(nodes): 
     global line_length 
     padstring=pad(len(nodes)) 
     stringnodes=[ "%02d"%(n) for n in nodes ] 
     leader="_"* abs((line_length/2) - len(padstring)) 
     print leader, padstring.join(stringnodes) 


for level in [ [50], 
       [42,71], 
       [31,45,60,98], 
       [6,11,43,49,55] 
     ]: 
     printlevel(level) 

С (я считаю) вопрос еще один форматирования, чем на самом деле посещения узлов дерева ... Я просто выровнял дерево в список списков .. Это на самом деле не работает, но Я думаю, что его можно перестроить, чтобы заставить его работать.

+0

Имеет ли этот вопрос какое-либо отношение к Python? Я думал, что это вопрос Java. – gparyani

+1

Вопросник попросил псевдокод показать, что нужно сделать. Я использовал Python вместо псевдокода. – monojohnny

+0

На самом деле уже есть довольно приличная реализация Java из stackoverflow: http://stackoverflow.com/questions/4965335/how-to-print-binary-tree-diagram – monojohnny