Javascript 使用递归的N元树后序遍历

Javascript 使用递归的N元树后序遍历,javascript,recursion,tree,traversal,Javascript,Recursion,Tree,Traversal,在使用递归处理n元树遍历问题时,我遇到了一些困难,难以理解其他人的部分解决方案 基本上这是我的问题 if(root === null){ return []; } let arr = []; traverse(root); function traverse(root){ if(root.children === null){ arr.push(root.val); return; } for(let i = 0; i <

在使用递归处理n元树遍历问题时,我遇到了一些困难,难以理解其他人的部分解决方案

基本上这是我的问题

if(root === null){
    return [];
}

let arr = [];
traverse(root);

function traverse(root){
    if(root.children === null){
        arr.push(root.val);
        return;
    }
    for(let i = 0; i < root.children.length; i++){
        traverse(root.children[i]);    
        console.log(arr);
    }
    
    arr.push(root.val);
}
return arr;

return(函数遍历(acc,node){if(node){if(node.children)acc=node.children.reduce(遍历,acc);acc.push(node.val);}return acc;})([],root)“我不明白的是,有些解决方案不使用push()而只返回arr?…有人能解释一下这是怎么可能的”很简单,你只需要。。。说真的,我们应该如何向您解释您没有显示的代码是如何工作的?“这就是我所做的,其他人做了一些不同的事情,如果他们的工作与我的不一样,为什么他们的工作?”
root.children===null
将在没有更多子元素可遍历时到达-换句话说,这是结束对
遍历
的递归调用并将结果传递回调用堆栈的检查。-该算法的奇怪之处在于,它不使用尾部调用递归,您还可以返回与递归结果相关的当前值。
return(函数遍历(acc,node){if(node){if(node.children)acc=node.children.reduce(遍历,acc);acc.push(node.val);}return acc;}([],root)“我不明白的是,有些解决方案不使用push()而只返回arr?…有人能解释一下这是怎么可能的”很简单,你只需要。。。说真的,我们应该如何向您解释您没有显示的代码是如何工作的?“这就是我所做的,其他人做了一些不同的事情,如果他们的工作与我的不一样,为什么他们的工作?”
root.children===null
将在没有更多子元素可遍历时到达-换句话说,这是结束对
遍历
的递归调用并将结果传递回调用堆栈的检查。-这个算法的奇怪之处在于,它不使用尾部调用递归,还可以返回与递归结果相关的当前值。
if(root.children === null){
    return arr;
}