2016-08-13 6 views
1
var tree = { 
    "name" : "root", 
    "children" : [ 
    { 
     "name" : "first child", 
     "children" : [ 
     { 
      "name" : "first child of first", 
      "children" : [] 
     }, 
     { 
      "name" : "second child of first", 
      "children" : [] 
     } 
     ] 
    }, 
    { 
     "name" : "second child", 
     "children" : [] 
    } 
    ] 
} 

function postOrder(root) { 
    if (root == null) return; 

    postOrder(root.children[0]); 
    postOrder(root.children[1]); 

    console.log(root.name); 
} 

postOrder(tree); 

Utilise mon code pour une traversée de commande de poste récursive en javascript à l'aide d'une arborescence JSON.Traverse générale d'ordre de poste d'arbre

Comment j'adapterais ce code pour gérer N enfants dans un nœud?

+0

Avez-vous essayé quelque chose comme 'pour (enfant dans root.children) postOrder (root.children [enfant])'? – Tibrogargan

+0

@Tibrogargan fonctionne avec défi! Merci! mais je pense que je préfère beaucoup le "forEach" comme suggéré ci-dessous :) –

+0

Moi aussi. Mon cerveau attend toujours que la construction 'for .. in' de Javascript fonctionne de la même manière que dans d'autres langues, car chaque mot est plus propre. – Tibrogargan

Répondre

0

Cela devrait faire ce que vous voulez: il suffit de remplacer vos appels à postOrder avec root.children.forEach(postOrder);.

var tree = { 
 
    "name" : "root", 
 
    "children" : [ 
 
    { 
 
     "name" : "first child", 
 
     "children" : [ 
 
     { 
 
      "name" : "first child of first", 
 
      "children" : [] 
 
     }, 
 
     { 
 
      "name" : "second child of first", 
 
      "children" : [] 
 
     } 
 
     ] 
 
    }, 
 
    { 
 
     "name" : "second child", 
 
     "children" : [] 
 
    } 
 
    ] 
 
} 
 

 
function postOrder(root) { 
 
    if (root == null) return; 
 

 
    root.children.forEach(postOrder); 
 

 
    console.log(root.name); 
 
} 
 

 
postOrder(tree);

Je voudrais aussi déplacer la ligne qui imprime le nom root avant l'appel qui imprime les noms des enfants récursive, mais cela peut ne pas correspondre à votre cas d'utilisation.

+0

Parfait !! Merci beaucoup! Je savais que cela devait être fait itérativement à ce stade mais ma connaissance de javascript est pauvre en ce moment, le forEach est un truc que je garderai dans mes livres Merci! –

+0

De rien @WoodyBriggs –