Хорошо, я прочитал все другие связанные вопросы и не могу найти тот, который помогает с Java. Я в общих чертах понимаю от дешифровки, что я могу на других языках; но я должен все же понять это.
Проблема: Я хотел бы выровнять вид (который у меня есть работа с помощью рекурсии), и распечатайте его в общей форме дерева.
Поэтому скажите, что у меня есть это:
1
/ \
2 3
/ / \
4 5 6
Мой код распечатывает порядок уровня как это:
1 2 3 4 5 6
Я хочу распечатать его как это:
1
2 3
4 5 6
Теперь перед предоставлением мне моральной речи о выполнении моей работы... Я уже закончил свой проект Науки Аккомпанемента AP и стал любопытным на предмет этого, когда мой учитель упомянул вещь Поиска в ширину.
Я не знаю, поможет ли это, но здесь является моим кодом до сих пор:
/**
* Calls the levelOrder helper method and prints out in levelOrder.
*/
public void levelOrder()
{
q = new QueueList();
treeHeight = height();
levelOrder(myRoot, q, myLevel);
}
/**
* Helper method that uses recursion to print out the tree in
* levelOrder
*/
private void levelOrder(TreeNode root, QueueList q, int curLev)
{
System.out.print(curLev);
if(root == null)
{
return;
}
if(q.isEmpty())
{
System.out.println(root.getValue());
}
else
{
System.out.print((String)q.dequeue()+", ");
}
if(root.getLeft() != null)
{
q.enqueue(root.getLeft().getValue());
System.out.println();
}
if(root.getRight() != null)
{
q.enqueue(root.getRight().getValue());
System.out.println();
curLev++;
}
levelOrder(root.getLeft(),q, curLev);
levelOrder(root.getRight(),q, curLev);
}
Из того, что я могу выяснить, я должен буду использовать общую высоту дерева и использовать счетчик уровня... Только проблемой является мой счетчик уровня, продолжает рассчитывать, когда мой levelOrder использует рекурсию для возвращения через дерево.
Извините, если бы это к очень, но некоторые подсказки были бы хороши.:)
Вот как я бы это сделал:
levelOrder(List<TreeNode> n) {
List<TreeNode> next = new List<TreeNode>();
foreach(TreeNode t : n) {
print(t);
next.Add(t.left);
next.Add(t.right);
}
println();
levelOrder(next);
}
(Изначально это был настоящий код - на полпути надоело, так что это псуэодокодей)