Leetcode112.路径总和 Path Sum(Java)
##Tree##, ##Depth-first Search##
路径总和
采用DFS解决
- 设置递归函数
boolean hasPathSum(TreeNode root, int sum)
,考虑参数及返回结果,参数为一个树结点,和要求的总和sum
,返回表示是否存在一条从这个树结点出发到叶节点的路径和为sum
- 递归遍历时,遍历某个结点
node
的左儿子结点left
时,问题就转变为关于左儿子的子问题hasPathSum(node.left, sum - left.val)
,及问题转化为是否存在一条路径从该结点的左儿子出发到叶节点的路径和为sum - left.val
- 递归遍历到某个结点的右儿子结点时,情形与左儿子类似
- 递归出口为遍历到叶子结点
leaf
- 函数参数
sum == leaf.val
时,即表明存在这样一条路径,返回true
- 函数参数
sum != leaf.val
时,即表明不存在这样一条路径,返回false
- 函数参数
- 递归函数已参数方式传递变量,就已经隐藏了回溯法后的恢复现场操作
时间复杂度: O(n)
class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null) return false;
if (sum == root.val && root.left == null && root.right == null) return true;
return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
}
}