循环和递归遍历树的区别

235 阅读1分钟

//递归实现
function treeToList (tree, result = [], level = 1) {
    tree.forEach(node => {
      result.push(node)
      node.level = level++
      node.children && treeToList(node.children, result, level)
    })
    return result
}
// 循环实现
function treeToList (tree) {
  let result = tree.map(node => (node.level = 1, node))
  for (let i = 0; i < result.length; i++) {
    if (!result[i].children) continue
    let list = result[i].children.map(node => (node.level = result[i].level + 1, node))
    result.splice(i+1, 0, ...list)
  }
  return result
}