2015-05-10 178 views
2

我有一個編輯樹(可以更改節點的值),它不是二叉樹,我想將節點值的總和存儲在父節點中。 即:父節點的值是其所有子節點的總和

50 
/ | \ 
10 25 15 
| | \ | \ 
10 3 22 10 5 
在編輯我的成功

改變所有的層次,但初始化我沒有成功,比如我有最深層次的只是值(10 3 22 10 5)然後想從它開始。

回答

4

我的策略是做一個自上而下的遍歷。葉節點只是返回它們的當前值。內部節點根據他們的子女總數重新計算。

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); 
+1

我想重新修改沒有修改過程中的輸入,這些副作用是不乾淨的。只需直接返回累加的「值」即可。 – Tomalak

0

嘗試更新使用子節點值的父節點的值,例如

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