题解 | #复杂链表的复制#

二叉树中和为某一值的路径

http://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca

\别人的答案 copy过来的 写下来主要是因为 对list要消除最后一个而sum不用消除的疑惑
因为int 是基本类型,其值在递归的栈中不同,而list在栈中存的是地址,所以其内容要手动修改!!

public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
    ans = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> list = new ArrayList<>();
    solve(root, target, 0, list);
    return ans;
}
private ArrayList<ArrayList<Integer>> ans;
private void solve(TreeNode node, int target, int sum, ArrayList<Integer> list) {
    if (node != null) {
        sum += node.val;
        list.add(node.val);
        if (node.left == null && node.right == null) {
            if (sum == target) {
                ArrayList<Integer> res = new ArrayList<>(list); // ArrayList是引用传递
                ans.add(res);
            }
        } else {
            solve(node.left, target, sum, list); // 递归左子树
            solve(node.right, target, sum, list); // 递归右子树
        }
        // 消除掉当前节点对查找路径的影响 --> 至关重要
        ***list.remove(list.size() - 1);***
    }
}
全部评论

相关推荐

秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务