牛客Top200---二叉树和为指定值的路径(java)

Posted 小样5411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客Top200---二叉树和为指定值的路径(java)相关的知识,希望对你有一定的参考价值。

题目

给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径
例如:
给出如下的二叉树,sum=22

返回 [[5,4,11,2],[5,8,9]]

代码

方法理解起来也不难,就是先序遍历,遍历过程中对走过的路进行求和,如果遍历完一条路径不是想要的,则回退再遍历其它,回退时需要从集合中移除添加的节点,并且减去对应值

import java.util.*;

public class Solution {
    //初始化
    ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
    ArrayList<Integer> list = new ArrayList<>();
    int count = 0;
    public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
        dfs(root, sum);
        return ans;
    }
    public void dfs(TreeNode root, int sum)
    {
        if(root == null) return;//递归跳出条件,如root到叶子节点,root.left和root.right都为空,就return
        list.add(root.val);
        count += root.val;
        //走到叶子节点,形成的一条路径判断是否是符合要求的
        if(root.left == null && root.right == null && count == sum){
            ans.add(new ArrayList<>(list));//list是引用传递,为了防止递归时前后影响,所以每次都要新建一个进行添加
        }
        dfs(root.left, sum);
        dfs(root.right, sum);
        //回退
        list.remove(list.size() - 1);
        count -= root.val;
    }
}

以上是关于牛客Top200---二叉树和为指定值的路径(java)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树中是否存在节点和为指定值的路径(NC9/考察次数Top63/难度简单)

二叉树根节点到叶子节点和为指定值的路径(NC8/考察次数Top54/难度中等)

牛客题霸 NC9 二叉树中是否存在节点和为指定值的路径

二叉树是否存在节点和为指定值的路径/路径总和Ⅱ

NC9 二叉树中是否存在节点和为指定值的路径

[javascript]二叉树根节点到叶子节点和为指定值的路径