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

醉酒当歌 提交于 2020-02-05 01:59:40

题目链接

牛客网

题目描述

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

下图的二叉树有两条和为 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);
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!