给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。
一个有效的路径,指的是从根节点到叶节点的路径。
您在真实的面试中是否遇到过这个题?
样例
给定一个二叉树,和 目标值 = 5:
1
/ \
2 4
/ \
2 3
返回:
[
[1, 2, 2],
[1, 4]
]
package com.fk5431;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
/**
* Created by fk5431 on 6/25/17.
*/
public class binaryTreePathSum {
public List<List<Integer>> binaryTreePathSum(TreeNode root, int target) {
// Write your code here
List<List<Integer>> result = new ArrayList<>();
if(root == null){
return result;
}
Stack<Integer> stack = new Stack<>();
binaryTreePathSum(result, stack, 0, root, target);
return result;
}
private void binaryTreePathSum(List<List<Integer>> result, Stack<Integer> stack, int sum, TreeNode root, int target) {
sum += root.val;
stack.push(root.val);
if(sum == target ){
List<Integer> list = new ArrayList<>(stack);
stack.pop();
result.add(list);
return;
} else {
if( root.left != null){
binaryTreePathSum(result, stack, sum, root.left, target);
}
if( root.right != null){
binaryTreePathSum(result, stack, sum, root.right, target);
}
stack.pop();
}
}
public static void main(String[] args) {
}
}
class TreeNode {
public int val;
public TreeNode left, right;
public TreeNode(int val) {
this.val = val;
this.left = this.right = null;
}
}