Как улучшить: напечатать дерево по часовой стрелке? - PullRequest
0 голосов
/ 29 января 2019

Итак, я получил этот вопрос в интервью по телефону в Google, они хотят, чтобы я написал метод, который печатает внешние элементы дерева по часовой стрелке.Пример:

                      1
                    / | \
                   4  5  7
                  /  /   /\
                 9   12 3 24
                  \
                  14

                    ^    |
                    |    v
                    |-<--|

            prints 1, 7, 24, 3, 12, 14, 9, 4   
            notice that 5 isnt printed because its not "out"

, поэтому я придумал следующее:

 TreeNode {
    int val;
    List<TreeNode> children;
 }


 void printTreeClockWise(TreeNode root) {

      if (root == null) return;
      System.out.println(root.val);
      printRight(root);   // recursively prints the outer right nodes
      printLeafs(root);   // recursively prints roots with .children.size() > 0
      printLeft(root);   //recursively prints the left outer nodes
 }

Затем я реализовал эти вспомогательные функции, и он сказал, что это хорошо.Мои методы в основном возвращаются к самому левому / правому / нижнему узлу (к каждой из стен), а затем печатаются.Он сказал, что мои методы хороши, и они работают, но что, если теперь дерево огромно (не может поместиться в памяти), и они приходят с серверов по мере нашего продвижения, поэтому я не могу "надежно" дождаться загрузки всего дерева и затем распечатать его,Как мне обновить мой код?Я сказал, что могу добавить логическое значение и подождать, пока оно не станет истинным, а затем попытаться решить, является ли этот узел пригодным для печати, например,

 TreeNode {
    int val;
    List<TreeNode> Children;
    boolean noMoreChildrenUnder;
 }

Затем он сказал, что намек на добавление указателя на родительский элемент.

    TreeNode parent;

Тогда я понятия не имел, чем может помочь мне родительский указатель.Любые идеи для использования родительского указателя для достижения этой печати, при этом не нужно читать во всем дереве?Или любая оптимизация, которую я могу использовать здесь?Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...