《剑指Offer》34. 二叉树中和为某一值的路径

题目链接

牛客网

题目描述

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

下图的二叉树有两条和为 22 的路径:10, 5, 7 和 10, 12
在这里插入图片描述

解题思路

回溯一定要每一个add都对应一个remove,尤其注意即使是正确路径

public class Solution {
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        ArrayList<Integer> path = new ArrayList<>();
        backtracking(res, path, target, root);
        return res;
    }
    private void backtracking(ArrayList<ArrayList<Integer>> res, ArrayList<Integer>path, int target, TreeNode node) {
        if (node==null || node.val>target) return;
        if (target==node.val && node.left==null && node.right==null) {
            path.add(node.val);
            res.add(new ArrayList<>(path));
            path.remove(path.size()-1); // 第一次这里没写报错
            return;
        }
        path.add(node.val);
        if (node.left!=null) backtracking(res, path, target-node.val, node.left);
        if (node.right!=null) backtracking(res, path, target-node.val, node.right);
        path.remove(path.size()-1);
    }
}
发布了206 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_38611497/article/details/104160617
今日推荐