2016-08-06 8 views
1

Мне нужно выполнить обход предварительного тропа тройного дерева. Я знаком с этим обходом на бинарном дереве, такие как:Замена порядка тройного дерева

public void preorder(){ 

    System.out.println(data); 
    if (left != null) 
     left.preorder(); 
    if (right != null) 
     right.preorder(); 
} 

Это траверсы в корень порядка, влево, вправо. Я смущен относительно того, как это сделать с добавлением дополнительного дочернего узла. Если бы кто-нибудь мог это объяснить, это было бы здорово. благодаря

+1

не просто сделать рекурсивный вызов по центру между левым и правым? – danh

+0

Thats, о чем я думал, но я не был уверен, что это определенно правильный синтаксис или нет. Я просто искал подтверждение –

+0

Я думаю, что все. 'if (средний) middle.preorder();' после левого, перед правым. – danh

ответ

0

Общие обходе п-арной дерева происходит следующим образом:

  • траверс самой
  • Если существует узел, траверс ребенка
  • Если существует, траверс ребенка
  • ...
  • Если существует, пересечь ребенка n

бинарное дерево, случается, есть единственный ребенок (слева) и ребенка (справа), но троичный дерево также имеет середину. Таким образом, ваш обход будет иметь дополнительное заявление между обходе слева и правое поддерево:

if (middle != null) 
    middle.preorder(); 
+0

безупречный. Спасибо за вашу помощь. –

+0

@NickCastello Добро пожаловать. Если вы удовлетворены ответом и не ищете дополнительной помощи, подумайте о том, чтобы принять ответ, нажав на серое окно рядом с ним (станет видимым через 4 минуты). Это позволит другим посетителям сайта узнать, что ваша проблема решена, и заработайте новый значок в Stack Overflow. – dasblinkenlight

0

Траверс среднего узла между левым и правым узлом

public void preOrder(Node node) { 
    if (node == null) { 
     return; 
    } 
    System.out.print(" " + node.data); 
    preOrder(node.left); 
    preOrder(node.middle); 
    preOrder(node.right); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^