path sum ii java_[LeetCode][Java] Path Sum II

题目:

Given a binary tree and a sum, find all root-to-leaf paths where each path‘s sum equals the given sum.

For example:

Given the below binary tree andsum = 22,

5

/ 4 8

/ / 11 13 4

/ \ / 7 2 5 1

return

[

[5,4,11,2],

[5,8,4,5]

]

题意:

给定一棵二叉树和一个和,找出从根节点到叶子节点的遍历中节点值的和等于给定目标值的所有的路径。

比如:

给定如下的二叉树和sum = 22,

5

/ 4 8

/ / 11 13 4

/ \ / 7 2 5 1

返回

[

[5,4,11,2],

[5,8,4,5]

]

算法分析:

* 同题目《Path Sum》相似

* 同样利用递归策略

* 不同之处在于本题需要在遍历的时候记录走寻的路径 dfs

*但是需要注意的是,递归回溯上来的时候要进行清理工作

AC代码:

/**

* Definition for binary tree

* public class TreeNode {

* int val;

* TreeNode left;

* TreeNode right;

* TreeNode(int x) { val = x; }

* }

*/

public class Solution {

public ArrayList> pathSum(TreeNode root, int sum) {

ArrayList> res=new ArrayList>();

helper(root,sum,new ArrayList(),res);

return res;

}

public void helper(TreeNode root,int sum,ArrayList cur,ArrayList> res)

{

if(root==null)

return;

//到达叶子节点且根结点的值等于sum

if(root.left==null && root.right==null && root.val==sum)

{

cur.add(root.val);

res.add(new ArrayList(cur));

//清除操作

cur.remove(cur.size()-1);

return;

}

//没有到达叶子节点,左子树不为空

if(root.left!=null)

{

cur.add(root.val);

//对左子树进行递归调用

helper(root.left,sum-root.val,cur,res);

//返回时,清除操作

cur.remove(cur.size()-1);

}

//没有到达叶子节点,右子树不为空

if(root.right!=null)

{

cur.add(root.val);

//对右子树进行递归调用

helper(root.right,sum-root.val,cur,res);

//返回时,清除操作

cur.remove(cur.size()-1);

}

}

}

版权声明:本文为博主原创文章,转载注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值