
思路:
目标值 = 目标值 - 当前节点值
共有几种情况:
0,当节点为空,return
1,当目标值小于0,return
2,当目标值为0 并且 节点下无其他节点
节点下无其他节点说明是叶子节点,并且路径值的和满足了目标值,添加到结果中 并且return
3,当目标值大于0,继续递归
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
if (root == null){
return result;
}
ArrayList<Integer> path = new ArrayList<>();
this.find(root, target, result, path);
return result;
}
private void find(TreeNode root, int target, ArrayList<ArrayList<Integer>> result, ArrayList<Integer> path) {
// 0,当节点为空,return
if (root == null) {
return;
}
path.add(root.val);
target -= root.val;
// 1,当目标值小于0,return
if(target < 0){
return;
}
// 2,当目标值为0 并且 节点下无其他节点, 保存并返回
if(target == 0 && root.left == null && root.right == null){
result.add(path);
return;
}
// 继续遍历左右节点
// 这里new path是因为左右都会在下次递归path.add(root.val);
this.find(root.left, target, result, new ArrayList<>(path));
this.find(root.right, target, result, new ArrayList<>(path));
}
本文介绍了一种寻找从根节点到叶子节点路径的算法,路径上节点值之和等于特定目标值。该算法通过递归实现,详细阐述了四种基本情况及其处理方式。
369

被折叠的 条评论
为什么被折叠?



