思路:以先序遍歷(根節(jié)點(diǎn)-左子樹-右子樹)的方式訪問二叉樹的每一個(gè)節(jié)點(diǎn)颊郎,記錄根節(jié)點(diǎn)到遍歷到這個(gè)節(jié)點(diǎn)的所有節(jié)點(diǎn)值之和,同時(shí)用一個(gè)list存儲遍歷的路徑姆吭,若節(jié)點(diǎn)和等于給定值則返回路徑,直到葉子節(jié)點(diǎn)内狸,結(jié)束遞歸。
用到的數(shù)據(jù)結(jié)構(gòu):ArrayList,stack
代碼如下:
import java.util.ArrayList;
import java.util.Stack;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(root==null){
return result;
}
Stack<Integer> stack = new Stack<>();
FindPath(root, target, stack, result);
return result;
}
private void FindPath(TreeNode root, int target, Stack<Integer> stack, ArrayList<ArrayList<Integer>> result) {
if(root==null){
return;
}
if(root.left==null&&root.right==null){
if(root.val==target){
ArrayList<Integer> list = new ArrayList<>();
for(int i:stack){
list.add(i);
}
list.add(root.val);
result.add(list);
}
}else{
stack.push(root.val);
FindPath(root.left, target-root.val, stack, result);
FindPath(root.right, target-root.val, stack, result);
stack.pop();
}
}
}