2016-08-06 1 views
1

Je dois effectuer une traversée de précommande d'un arbre ternaire. Je connais ce traversal sur un arbre binaire, comme:Parcours de précommande de l'arbre ternaire

public void preorder(){ 

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

Cette traverse dans la racine de commande, Gauche, Droite. Je suis confus quant à la façon de le faire avec un nœud enfant intermédiaire ajouté. Si quelqu'un pouvait expliquer cela, ce serait génial. grâce

+1

ne serait pas vous faire juste un appel récursif au milieu entre gauche et droite? – danh

+0

C'est ce que je pensais mais je n'étais pas sûr si c'était vraiment la bonne syntaxe ou pas. Je cherchais juste une confirmation –

+0

Je pense que c'est tout. 'if (middle) middle.preorder();' après la gauche, avant la droite. – danh

Répondre

0

traversal général de pré-commande de l'arbre n-aire est la suivante:

  • Traverse le nœud lui-même
  • Si existe, l'enfant traverse
  • Si existe, l'enfant traverse
  • ...
  • S'il existe, traverser l'enfant n

arbre binaire ne contient qu'une enfant (à gauche) et de l'enfant (à droite), mais l'arbre ternaire a également un milieu. Ainsi, votre traversal aurait une déclaration supplémentaire entre traversant la gauche et le sous-arbre droit:

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

parfait. Merci pour votre aide –

+0

@NickCastello Vous êtes les bienvenus. Si vous êtes satisfait de la réponse et que vous ne cherchez pas d'aide supplémentaire, envisagez d'accepter la réponse en cochant la case grise à côté (elle deviendra visible dans 4 minutes). Cela permettrait aux autres visiteurs du site de savoir que votre problème est résolu et de gagner un nouveau badge sur Stack Overflow. – dasblinkenlight

0

Traverse nœud du milieu entre le noeud gauche et à droite

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