【113-Path Sum II(路径和II)】
【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
原题
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 and sum = 22,
5
/ 4 8
/ / 11 13 4
/ \ / 7 2 5 1
return
[
[5,4,11,2],
[5,8,4,5]
]
题目大意
给定一棵二叉树和一个和,判断从树的根结点到叶子结点的所有结点的和是否等于给定的和,如果等于就记录这条路径。
解题思路
对树进行遍历,并且使用回溯法进行求解。
代码实现
树结点类
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
算法实现类
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Solution {
private List<List<Integer>> result;
private List<Integer> l;
private int sum;
private int curSum = 0;
public List<List<Integer>> pathSum(TreeNode root, int sum) {
result = new LinkedList<>();
if (root != null) {
this.sum = sum;
l = new LinkedList<>();
pathSum(root);
}
return result;
}
private void pathSum(TreeNode root) {
if (root != null) {
l.add(root.val);
curSum += root.val;
if (root.left == null && root.right == null && curSum == sum) {
List<Integer> list = new LinkedList<>();
for (Integer i : l) {
list.add(i);
}
result.add(list);
}
if (root.left != null) {
pathSum(root.left);
}
if (root.right != null) {
pathSum(root.right);
}
curSum -= root.val;
l.remove(l.size() - 1); // 删除最后一个
}
}
}
评测结果
点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。
特别说明
欢迎转载,转载请注明出处【http://blog.csdn.net/derrantcm/article/details/47438073】
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-20 15:48:21