2
我有一個編輯樹(可以更改節點的值),它不是二叉樹,我想將節點值的總和存儲在父節點中。 即:父節點的值是其所有子節點的總和
50
/ | \
10 25 15
| | \ | \
10 3 22 10 5
在編輯我的成功
改變所有的層次,但初始化我沒有成功,比如我有最深層次的只是值(10 3 22 10 5)然後想從它開始。
我有一個編輯樹(可以更改節點的值),它不是二叉樹,我想將節點值的總和存儲在父節點中。 即:父節點的值是其所有子節點的總和
50
/ | \
10 25 15
| | \ | \
10 3 22 10 5
在編輯我的成功
改變所有的層次,但初始化我沒有成功,比如我有最深層次的只是值(10 3 22 10 5)然後想從它開始。
我的策略是做一個自上而下的遍歷。葉節點只是返回它們的當前值。內部節點根據他們的子女總數重新計算。
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 node = //get the changed node
while (node.Parent != null)
{
node = node.Parent;
// set node.Value from sum of node.childnode values
}
我想重新修改沒有修改過程中的輸入,這些副作用是不乾淨的。只需直接返回累加的「值」即可。 – Tomalak