给定一个二叉树和一个值\ 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;
    }
}
全部评论

相关推荐

可可可可可_:nb啊,看样子是专科玩了几年随便专升本了个民办,又玩了两年。你这能找到我吃
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务