LeetCode——113. 路径总和 II(DFS)

题目描述

image.png

解题思路

DFS是解决这个问题的核心思路。

  1. 首先判断传入的节点是否为空,如果为空,则返回空数组。
  2. 定义DFS函数(节点,某条路径上剩余的和,临时数组)
  3. 进入DFS函数就让临时数组收录当前节点的值。
  4. 如果当前节点是叶子节点,并且剩余和与当前的值一致,则将临时数组放入结果数组中。
  5. 如果左子节点存在就让左子节点,新的剩余和,临时数组的副本进入DFS函数。
  6. 如果右子节点存在就让右子节点,新的剩余和,临时数组的副本进入DFS函数。

AC代码

var pathSum = function(root, targetSum) {
    
    
  // 路径总和无论是I还是II都是面试的常考题,尤其是这个II被快手考到了
  // 核心解题思路就是DFS
  const res = [];
  if (!root) return [];
  function dfs(node,sum,temp) {
    
    
    temp.push(node.val);
    if (!node.left && !node.right && sum === node.val) {
    
    
      res.push(temp);
      return;
    }
    if (node.left) {
    
    
      dfs(node.left,sum - node.val,temp.slice());
    }
    if (node.right) {
    
    
      dfs(node.right,sum- node.val,temp.slice());
    }
  };
  dfs(root,targetSum,[]);
  return res;
};

总结与思考

路径总和II对应着剑指Offer中的二叉树中和为某一值得路径,这道题目是各个大厂的高频考题,是我们必须熟练掌握的题目,我们不仅要能做出来这个题目,还要深刻理解DFS深度优先遍历的思想。其实这道题目我们还可以和路径总和I进行对比,我们可以发现这道题完全可以去解决那个题目,因为加入res为空则返回false,不为空则说明存在这样的路径,则返回true。

参考文档

猜你喜欢

转载自blog.csdn.net/sinat_41696687/article/details/125051594