LeetCode剑指offerQ34 二叉树中和为某一值的路径

本文介绍了一种使用深度优先搜索(DFS)算法解决二叉树路径求和问题的方法。通过递归地遍历树的节点,记录从根到叶的路径和,当达到叶子节点且路径和等于目标值时,将该路径保存为解决方案之一。文章详细解释了如何避免浅复制带来的问题,并提供了完整的代码实现。
摘要由CSDN通过智能技术生成

思路

经典的dfs题目,设置一个变量用来记录当前路径上的和count,再用一个list(r)用来记录当前的路径。最后只需要在叶子结点时判断是否count==sum,若相等则将r添加进入最后的结果list,注意添加时需要进行深复制操作,否则仅仅是浅复制,不起效果。同时,深复制的方法一般有循环复制。通过ArratList()初始化函数进行复制有些情况下不行。

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    List<List<Integer>> re;
    int sum;
    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        re=new ArrayList<>();
          if(root==null) return re;
         
         this.sum=sum;
        dfs(root,0,0,new ArrayList<Integer>());
        return re;
          
    }
    void dfs(TreeNode root,int count,int height,List<Integer> r){
        if(root.left==null&root.right==null){
            count+=root.val;
            r.add(root.val);
            if(count==sum) {  
                List<Integer> rr=new ArrayList<>(r);
            // for(int i=0;i<r.size();i++){
            // rr.add(r.get(i));
            // //System.out.print(r.get(i));
            // }
                re.add(rr);
            }
            r.remove(height);
            return;
        }
        count+=root.val;
        r.add(root.val);
        if(root.left!=null)
              dfs(root.left,count,height+1,r);
        if(root.right!=null)
            dfs(root.right,count,height+1,r);
        r.remove(height);
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值