二叉树中和为某一值的路径

   输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

   注意:非叶子节点也要进行弹出

   

 1 import java.util.*;
 2 /**
 3 public class TreeNode {
 4     int val = 0;
 5     TreeNode left = null;
 6     TreeNode right = null;
 7 
 8     public TreeNode(int val) {
 9         this.val = val;
10 
11     }
12 
13 }
14 */
15 public class Solution {
16     
17     ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
18     Stack<Integer> stack=new Stack<Integer>();
19     public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
20         if(root==null) return result;
21         
22         int currentSum=0;
23         findEqualsPath(root,target,currentSum);
24         return result;
25     }
26     
27     public void findEqualsPath(TreeNode treeNode,int target,int currentSum){
28         currentSum+=treeNode.val;
29         stack.push(treeNode.val);
30         if(treeNode.left==null && treeNode.right==null){
31             if(target==currentSum){
32                 ArrayList<Integer> temp=new ArrayList<Integer>();
33                 Enumeration<Integer> items = stack.elements();
34                 while(items.hasMoreElements()){
35                     temp.add(items.nextElement());
36                 }
37                 result.add(temp);
38             }
39         }
40         if(treeNode.left!=null) findEqualsPath(treeNode.left,target,currentSum);
41         if(treeNode.right!=null) findEqualsPath(treeNode.right,target,currentSum);
42         
43         stack.pop();
44     }
45 }
View Code

 

posted on 2018-08-06 22:57  溪水静幽  阅读(84)  评论(0)    收藏  举报