剑指Offer:二叉树中和为某一值的路径(java代码实现)

题目描述
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

解题思路

回溯算法
每个结点的值都有选和不选两种可能
如果当前结点为空直接return null
1.先选中当前结点的值 判断是否满足和等于target 并且为叶子节点
2.递归判断左子树右子树。
3.删除上次选中的值

这道题和字符串全排列 组合 求子集 n皇后解题思想都差不多 一定要掌握!!!!

注意事项!!!

我写的时候先判断是否为满足和等于target和叶子结点的条件 再添加值 这样是错的。
下面介绍错误原因
1.如果此时遍历到叶子结点 因为先判断的原因此时肯定不满足条件 因为还没有添加该节点的值
2.添加该节点的值 此时已经满足了条件 但是因为该节点是叶子节点 进行下次递归判断左树和右树时会直接return null 并不会把该次满足条件的结果添加进结果
所以应先添加值再判断是否满足条件

public class Solution {
    ArrayList<ArrayList<Integer>> res = new ArrayList();
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
        FindPath(root, new ArrayList(), target);
        return res;
    }
    public void FindPath(TreeNode node,ArrayList<Integer> temp,int target) {
        if(node == null) {
            return;
        }
        temp.add(node.val);
        target -= node.val;
        if(target == 0 && node.left == null && node.right == null) {
            res.add(new ArrayList<Integer>(temp));
        }
        
        FindPath(node.left,temp,target);
        FindPath(node.right,temp,target);
        temp.remove(temp.size()-1);
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值