2016-08-13 3 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); 

Heres my code for a recursive post traversal in javascript, используя дерево JSON.Общее дерево Почтовый перевод

Как я могу адаптировать этот код для обработки N детей в узле?

+0

Вы пробовали что-то вроде 'for (child in root.children) postOrder (root.children [child])'? – Tibrogargan

+0

@ Тиброгарган вызывающе работает! Благодаря! но я думаю, что я предпочитаю «forEach», как предложено ниже :) –

+0

Так же я. Мой мозг продолжает ожидать, что конструкция Javascript 'for .. in' будет работать так же, как и на других языках, для каждого чище. – Tibrogargan

ответ

0

Это должно делать то, что вы хотите: просто замените свои звонки на postOrderroot.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);

Я также переместить линию, которая печатает имя root перед вызовом, который печатает имена детей рекурсивен, но это может не соответствовать вашему случаю использования.

+0

Отлично !! большое спасибо! я знал, что это нужно делать итеративно на данный момент, но мои знания javascript в данный момент ничтожны, forEach - это трюк, который я буду хранить в своих книгах. Спасибо! –

+0

Добро пожаловать @WoodyBriggs –

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