Leetcode112.路径总和 Path Sum(Java)

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值