Как распечатать двоичное дерево поиска?

привет, я реализовал bst в mips, и мне нужно распечатать это дерево. Каждый узел имеет следующие четыре информации

  • его значение

  • адрес родителей

  • оставил адрес ребенка

  • правильный адрес ребенка

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

12

8-16

x-9  13-17

x-x  x-11 x-x  x-x

Не могли бы вы предложить способ реализации этого метода печати?


person Salih Erikci    schedule 20.04.2012    source источник
comment
Попробуйте использовать graphviz. Это тоже домашнее задание? :-)   -  person James Andres    schedule 20.04.2012
comment
да, это домашнее задание, которое нужно сделать в сборке mips. Я не прошу вас писать для меня код, я просто спрашиваю, как это сделать.   -  person Salih Erikci    schedule 20.04.2012
comment
@JamesAndres, как программа высокого уровня, которая использует собственную справку по формату, поскольку он использует сборку?   -  person byrondrossos    schedule 20.04.2012
comment
Не могли бы вы опубликовать свою реализацию? Мы не сможем вам помочь, не зная об этом.   -  person byrondrossos    schedule 20.04.2012
comment
Извините, я пропустил часть о MIPS. Да, GraphViz не имеет особого смысла в этом контексте. Мои познания в ассемблере невелики, поэтому, боюсь, я не буду здесь полезен :-(.   -  person James Andres    schedule 20.04.2012


Ответы (2)


Порядок, в котором вы печатаете дерево, представляет собой обход в ширину (уровень за уровнем). Один из вариантов может быть следующим: поддерживать рабочий список, изначально засеянный корнем дерева. Затем повторно удалите из рабочего списка очередь, распечатайте текущий элемент (или x, если его нет), затем добавьте двух дочерних элементов в рабочий список. Вам понадобится какой-то способ отслеживать, когда вы закончите обход дерева, возможно, сначала подсчитав количество узлов и остановившись, как только вы напечатаете это количество узлов.

Тем не менее, поскольку вы делаете это в MIPS, один из более простых вариантов — линеаризовать дерево в массив, а затем распечатать массив. Если вы нумеруете узлы так же, как вы нумеруете узлы в неявной двоичной куче, вы можете рекурсивно/итеративно пройтись по дереву, заполнить массив узлами дерева, а затем пройтись по массиву, распечатав все.

Надеюсь это поможет!

person templatetypedef    schedule 20.04.2012

Поскольку вам нужно печатать уровень за уровнем вашего двоичного дерева, наиболее очевидный способ вывода информации — пройти по дереву, используя метод поиска в ширину. Остальное просто и не должно быть проблемой. :)

person Michael    schedule 20.04.2012