📌  相关文章
📜  查询以计算给定二叉树中从根到给定节点的路径之和(1)

📅  最后修改于: 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)。