假设有如下图所示的数据结构:
转换成为 js 代码为如下结构:
const chainNode = {
value: 1,
left: {
value: 2,
left: {
value: 4,
left: {
value: 7
}
}
},
right: {
value: 3,
left: {
value: 5,
left: {
value: 8
}
},
right: {
value: 6,
left: {
value: 9
},
right: {
value: 10
}
}
}
}
求所有链条数字之和,如下所示:
1 + 2 + 4 + 7 +
1 + 3 + 5 + 8 +
1 + 3 + 6 + 9 +
1 + 3 + 6 + 10
解题思路:
1、如上图所示共有 4 个末端节点分别为 7 、8 、9 、10
2、求末端节点以及其祖先节点的总和 currentChainSum 并叠加到最终总和 total 里
function getChainSum(chainNode) {
// 总和
let total = 0
// 叠加计算器
const accumulator = (chainNode, prevChainSum = 0) => {
const {value, left, right} = chainNode
// 当前节点的值 + 当前节点的所有父节点之和
const currentChainSum = value + prevChainSum
// 如果有 left 节点则继续叠加
left && accumulator(left, currentChainSum)
// 如果有 right 节点则继续叠加
right && accumulator(right, currentChainSum)
// 当节点到达末端时叠加总和
if (!left && !right) {
total += currentChainSum
}
}
accumulator(chainNode)
return total
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。