📅  最后修改于: 2023-12-03 15:10:47.825000             🧑  作者: Mango
给定一颗二叉树,要求从根节点开始到指定节点的所有节点的值相加,得到一个整数值,即为路径之和。
首先,需要遍历树,获取到指定节点的路径。可以采用递归方式进行遍历,一旦找到指定节点,将路径节点加入到一个数组中,最后计算数组中所有节点值之和即可。
以下是JavaScript代码实现,输入参数为根节点和指定节点。
function getPathSum(root, target) {
let path = [];
let res = [];
const dfs = (node, sum) => {
if (!node) {
return;
}
path.push(node.val);
sum += node.val;
if (node === target) {
res = [...path];
}
dfs(node.left, sum);
dfs(node.right, sum);
path.pop();
sum -= node.val;
};
dfs(root, 0);
return res.reduce((acc, cur) => acc + cur, 0);
}
const tree = {
val: 1,
left: {
val: 2,
left: { val: 4, left: null, right: null },
right: { val: 5, left: null, right: null },
},
right: {
val: 3,
left: { val: 6, left: null, right: null },
right: { val: 7, left: null, right: null },
},
};
const node = tree.left.right;
console.log(getPathSum(tree, node));
// 输出: 7 (1 + 2 + 5)
在最坏情况下,即遍历到二叉树最后一个节点时,需要遍历所有节点,所以时间复杂度为 O(n)。