题解 | #二叉树根节点到叶子节点和为指定值的路径#

二叉树根节点到叶子节点和为指定值的路径

http://www.nowcoder.com/practice/840dd2dc4fbd4b2199cd48f2dadf930a

感觉这题跟先序遍历是一个道理,在访问节点值的地方,将值放入到预先创建好的List集合里,然后加上叶子节点的判断条件,符合条件,就将list复制一份放到新创建的List集合中。我自己的思路感觉注意点有两个地方: 第一个是result作为局部变量,每个方法拥有一份,不共享,不能将它定义为成员变量 第二个是把左右子树都遍历完的节点的值从List集合中删除,即list.remove(list.size() - 1);

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<>>
     */
    ArrayList<ArrayList<Integer>> finalList = new ArrayList<>();
    ArrayList<Integer> list = new ArrayList<>();
    
    public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
        // write code here
        calculateNode(root, sum, 0);
        return finalList;
    }
    
    public void calculateNode(TreeNode root, int sum, int result){
        if(root != null){
            list.add(root.val);
            if(root.left == null && root.right == null && result + root.val == sum){
                finalList.add(new ArrayList<>(list));
            }
            calculateNode(root.left, sum, result + root.val);
            calculateNode(root.right, sum, result + root.val);
            list.remove(list.size() - 1);//移除完全遍历过的节点的值
        }
    }
}
全部评论

相关推荐

07-30 11:52
门头沟学院 Java
美团暑期实习没投递成功,这次正式批的北斗计划总该有我的一部分了吧!
求职的纳鲁多:大佬投我就不投了,毕竟王不见王,避你锋芒
点赞 评论 收藏
分享
07-07 12:47
门头沟学院 Java
码农索隆:竟然还真有卡体检报告的
点赞 评论 收藏
分享
06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务