给定一个二叉树和一个值\ sum sum,请找出所有的根节点到叶子节点的节点值之和等于\ sum sum 的路径
二叉树根节点到叶子节点和为指定值的路径
http://www.nowcoder.com/questionTerminal/840dd2dc4fbd4b2199cd48f2dadf930a
用栈的结构性质,然后递归就行。
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */ public class Solution { /** * * @param root TreeNode类 * @param sum int整型 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) { Stack<Integer> stack = new Stack<Integer>(); ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); result = allPath(result, stack, root, sum); return result; } public ArrayList<ArrayList<Integer>> allPath(ArrayList<ArrayList<Integer>> result,Stack<Integer> stack,TreeNode root,int sum){ if(root!=null) { stack.push(root.val); if(root.left==null&&root.right==null) { //到了叶子,不能往下了,则此时栈类的元素均为一条路劲上的,然后判断栈类的元素和是否为给定的sum int num = 0; for (int i = 0; i < stack.size(); i++) { num+=stack.get(i); } if(num==sum) {//判断栈类的元素和是否为给定的sum,若等于,则将其依次添加进入listz中 ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < stack.size(); i++) { list.add(stack.get(i)); } result.add(list); } } allPath(result, stack, root.left, sum); allPath(result, stack, root.right, sum); stack.pop();//往上走了,则出栈一个。 } return result; } }