题目描述
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
思路
dfs算法
代码
public class Solution24 {
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
ArrayList<Integer> trace = new ArrayList<>();
if (root == null)
return ret;
pa(root, target, ret, trace);
return ret;
}
public void pa(TreeNode root, int target, ArrayList<ArrayList<Integer>> ret, ArrayList<Integer> trace) {
trace.add(root.val);
//若该结点是叶子结点则比较当前路径和是否等于期待和。
if (root.left == null && root.right == null) {
if (target == root.val)
ret.add(new ArrayList<>(trace));
}
if (root.left != null)
pa(root.left, target - root.val, ret, trace);
if (root.right != null)
pa(root.right, target - root.val, ret, trace);
//弹出结点,每一轮递归返回到父结点时,当前路径也应该回退一个结点
trace.remove(trace.size() - 1);
}
public static void main(String[] args) {
}
}
本文介绍了一种使用深度优先搜索(DFS)算法查找二叉树中所有路径,这些路径的节点值之和等于给定目标整数的方法。通过递归实现,详细解释了如何跟踪路径、判断条件以及回溯过程。

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



