如何使用Javascript计算通用树中的子级总和

如何使用Javascript计算通用树中的子级总和,javascript,algorithm,tree,depth-first-search,Javascript,Algorithm,Tree,Depth First Search,我想计算子节点的总和并将其保存在父节点上。如图所示,蓝色数字是孩子们的总和 到目前为止,我已经尝试过: const树={ 名称:“根节点”, 值:0, 儿童总数:0, 儿童:[ { 名称:“一个节点”, 数值:10, 儿童总数:0, 儿童:[] }, { 名称:“B节点”, 数值:10, 儿童总数:0, 儿童:[] } ] } 等等 所以在每个节点的sumofchildren中,我要计算子节点(所有子节点)的总和 所以我试着这样做后序树遍历 let sum = 0; function post

我想计算子节点的总和并将其保存在父节点上。如图所示,蓝色数字是孩子们的总和

到目前为止,我已经尝试过:

const树={
名称:“根节点”,
值:0,
儿童总数:0,
儿童:[
{
名称:“一个节点”,
数值:10,
儿童总数:0,
儿童:[]
},
{
名称:“B节点”,
数值:10,
儿童总数:0,
儿童:[]
}
]
}
等等
所以在每个节点的
sumofchildren
中,我要计算子节点(所有子节点)的总和

所以我试着这样做
后序树遍历

let sum = 0;
function postOrder(root) {
  if (root == null) return;

  root.children.forEach((el) =>{
     postOrder(el);

  });

  sum+=root.value;

  // Here i am not sure how to do this 
  root.sumOfTheChildren+=root.value;

}

postOrder(tree);
但这并没有给出所需的结果。
那么,如何获得正确的和呢?

可以通过先递归计算子值的和,然后返回子值和父值的和来简化逻辑

const树={
名称:“根节点”,
值:0,
儿童总数:0,
儿童:[{
名称:“一个节点”,
数值:10,
儿童总数:0,
儿童:[{
名称:“D节点”,
价值:35,
儿童总数:0,
儿童:[]
}]
},
{
名称:“B节点”,
数值:10,
儿童总数:0,
儿童:[]
}
]
};
函数后序(根){
if(root.children){
root.children.forEach(child=>{
root.sumof children+=后序(child);
});
}
返回root.sumofChildren+root.value;
}
console.log(postOrder(tree));
控制台日志(树)