牛客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/难度简单)