路径总和(从根节点出发)

  1. 输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
  2. 输出:[[5,4,11,2],[5,8,4,5]]

image.png

  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. 路径: 根节点-> 叶子节点
  11. 其中叶子节点没有子节点
  12. var pathSum = function(root, targetSum) {
  13. let ret = []
  14. const isValid = (node,sum) => {
  15. if (sum!=targetSum) return false
  16. if (node.left || node.right) return false
  17. return true
  18. }
  19. const dfs = (node,sum,path=[]) => {
  20. if(!node) return
  21. let _sum = sum + node.val
  22. if(isValid(node,_sum)) {
  23. path.push(node.val)
  24. ret.push(path)
  25. return
  26. }
  27. if(node.left) dfs(node.left, _sum, [...path, node.val])
  28. if(node.right) dfs(node.right, _sum, [...path, node.val])
  29. }
  30. dfs(root,0)
  31. return ret
  32. };

路径总和(从任意节点出发)

  1. 输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
  2. 输出:3

image.png

  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. // 1.遍历树,以每个节点为起始点;
  11. // 2.因为存在后面子节点值之和等于0;故isVaild(_sum)满足条件后,需要继续遍历;
  12. var pathSum = function(root, targetSum) {
  13. let ret = 0;
  14. const isVaild = (sum) => {
  15. return sum == targetSum
  16. }
  17. const dfs = (node, sum) => {
  18. if(!node) return
  19. let _sum = node.val + sum
  20. if(isVaild(_sum)) ret++
  21. dfs(node.left, _sum)
  22. dfs(node.right, _sum)
  23. }
  24. // 遍历树,以每个节点为起始点
  25. const dfsTree = (node) => {
  26. if(!node) return
  27. dfs(node, 0)
  28. dfsTree(node.left, 0)
  29. dfsTree(node.right, 0)
  30. }
  31. dfsTree(root)
  32. return ret
  33. };