Java, Печатающий Двоичное дерево с помощью Порядка Уровня в Определенном Формате

Хорошо, я прочитал все другие связанные вопросы и не могу найти тот, который помогает с 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 использует рекурсию для возвращения через дерево.

Извините, если бы это к очень, но некоторые подсказки были бы хороши.:)

17
задан Joshua 8 February 2019 в 04:32
поделиться

1 ответ

Вот как я бы это сделал:

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);
}

(Изначально это был настоящий код - на полпути надоело, так что это псуэодокодей)

8
ответ дан 30 November 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: