剑指 Offer II 050. 向下的路径节点之和

94 阅读1分钟

剑指 Offer II 050. 向下的路径节点之和

例子帮助理解题目意思

image.png

代码如下

深度优先遍历dfs

使用sum表示所到节点的和,将sum放入map数组中,如果sum一样则+1,默认是1

计算 sum - 目标值targetSum 如果能够在map中找到,则直接返回

var pathSum = function (root, targetSum) {
  var map = new Map();
  var res = 0;
  dfs(root, 0);
  return res;
  function dfs(root, sum) {
    if (!root) {
      return 0;
    }
    map.set(sum, (map.get(sum) || 0) + 1);
    var target = sum + root.val;
    res += map.get(target - targetSum) || 0;
    dfs(root.left, target);
    dfs(root.right, target);
    map.set(sum, map.get(sum) - 1);
  }
};

代码调试一

var pre = map.get(target - targetSum);
if (pre) {
  debugger;
}
res += pre || 0;
var obj1 = {
  val: 10,
  left: {
    val: 5,
    left: {
      val: 3,
      left: {
        val: 3,
        left: null,
        right: null,
      },
      right: {
        val: -2,
        left: null,
        right: null,
      },
    },
    right: {
      val: 2,
      left: null,
      right: {
        val: 1,
        left: null,
        right: null,
      },
    },
  },
  right: {
    val: -3,
    left: null,
    right: {
      val: 11,
      left: null,
      right: null,
    },
  },
};
console.log(pathSum(obj1, 1));

image.png

代码调试二

var obj2 = {
  val: 0,
  left: {
    val: 0,
    left: {
      val: 1,
      left: null,
      right: null,
    },
    right: {
      val: 1,
      left: null,
      right: null,
    },
  },
  right: {
    val: 0,
    left: {
      val: 1,
      left: null,
      right: null,
    },
    right: null,
  },
};
console.log(pathSum(obj2, 1));

image.png