leetcode113(路径总和II:DFS回溯)

该博客介绍了如何通过深度优先搜索(DFS)和回溯策略来解决LeetCode第113题,寻找二叉树中路径总和等于给定目标的叶子节点路径。例如,在给定的树结构和目标和22下,找到了路径[[5,4,11,2],[5,8,4,5]]。" 113494063,10535379,Python turtle转向:turtle.left()方法详解,"['Python', 'turtle图形库', '面向过程编程', '图形绘制', '教育']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。

示例:
输入:[5,4,8,11,null,13,4,7,2,null,null,5,1],22
输出:[ [5,4,11,2], [5,8,4,5] ]

题解:利用DFS回溯法遍历二叉树,同时记录当前路径的节点值总和,当达到一个叶子节点时,判断节点值总和是否等于目标和,如果等于,则得到一个结果。

class Solution {
    /**
     * {@code Deque<Integer>deque}用于记录路径
     * {@code List<List<Integer>>res}用于记录结果
     */
    private final Deque<Integer>deque=new LinkedList<>();
    private final List<List<Integer>>res=new ArrayList<>();
    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        DFS(root,0,sum);
        return res;
    }

    /**
     * @param node 当前搜索节点
     * @param sum  当前路径的节点值总和
     * @param targetSum 目标和
     */
    private void DFS(TreeNode node,int sum,int targetSum){
        if(node==null)
            return;
        deque.offerLast(node.val);
        sum+=node.val;
        if(node.left==null&&node.right==null){
            if(sum==targetSum)
                res.add(new ArrayList<>(deque));
            deque.pollLast();
            return;
        }
        DFS(node.left,sum,targetSum);
        DFS(node.right,sum,targetSum);
        deque.pollLast();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值