Javascript 父节点值是其所有子节点的总和

Javascript 父节点值是其所有子节点的总和,javascript,c#,recursion,tree,Javascript,C#,Recursion,Tree,我有一个不是二叉树的编辑树(可以更改节点的值),我想在父节点中存储节点值的总和。 i、 e: 在编辑中,我成功地更改了所有层次结构,但初始化没有成功,例如,我只得到了最深级别(10 3 22 10 5)的值,然后想从它开始。例如,尝试使用子节点值更新父节点值 Node node = //get the changed node while (node.Parent != null) { node = node.Parent; // set node.Value from sum

我有一个不是二叉树的编辑树(可以更改节点的值),我想在父节点中存储节点值的总和。 i、 e:


在编辑中,我成功地更改了所有层次结构,但初始化没有成功,例如,我只得到了最深级别(10 3 22 10 5)的值,然后想从它开始。例如,尝试使用子节点值更新父节点值

Node node = //get the changed node
while (node.Parent != null)
{
    node = node.Parent;
    // set node.Value from sum of node.childnode values 
} 

我的策略是进行自顶向下的遍历。叶节点只返回其当前值。内部节点根据其子节点的总和重新计算

function initialize(node) {
    // internal nodes get their total from children
    if (node.children.length > 0) {
        node.value = 0;
        for (var i = 0; i < node.children.length; i++) {
            node.value += initialize(node.children[i]);
        }
    }
    return node.value;
}
initialize(root);
函数初始化(节点){
//内部节点从子节点获取其总数
如果(node.childrence.length>0){
node.value=0;
对于(var i=0;i
我建议在这个过程中不要修改输入,这些副作用是不干净的。直接返回累计的
值即可。
function initialize(node) {
    // internal nodes get their total from children
    if (node.children.length > 0) {
        node.value = 0;
        for (var i = 0; i < node.children.length; i++) {
            node.value += initialize(node.children[i]);
        }
    }
    return node.value;
}
initialize(root);