来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/path-sum-iii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

解答

每个节点可以从其父节点开始,也可以从当前节点开始
所以每个节点自己开始都要试一下

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val, left, right) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.left = (left===undefined ? null : left)
  6. * this.right = (right===undefined ? null : right)
  7. * }
  8. */
  9. /**
  10. * @param {TreeNode} root
  11. * @param {number} targetSum
  12. * @return {number}
  13. */
  14. var pathSum = function(root, targetSum) {
  15. let paths = 0, nodes = [];
  16. function preorder (node, sum, isCollect) {
  17. if (!node) return 0;
  18. if (isCollect) {
  19. nodes.push(node);
  20. } else {
  21. if ((sum + node.val) === targetSum) {
  22. ++paths;
  23. }
  24. sum += node.val;
  25. }
  26. preorder(node.left, sum, isCollect);
  27. preorder(node.right, sum, isCollect);
  28. }
  29. preorder(root, 0, true);
  30. for (let node of nodes) {
  31. preorder(node, 0, false);
  32. }
  33. return paths;
  34. };