题解 | Java-回溯法-二叉树根节点到叶子节点和为指定值的路径

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

http://www.nowcoder.com/practice/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<>>
     */
    
    ArrayList<ArrayList<Integer>> res=new ArrayList<>();
    ArrayList<Integer> tmp = new ArrayList<>();
    int target = 0;
    int nowsum = 0;
    public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
        // write code here
        if (root==null) return res;
        target = sum;
        dfs(root);
        return res;
    }

    public void dfs (TreeNode root) {
        tmp.add(root.val);
        nowsum += root.val;
        //判断是否为叶子节点,当前nowsum是否与sum相等,
        if (root.right == null && root.left == null && target == nowsum) {
            //相等就将list加入到结果中,
            res.add(new ArrayList<>(tmp));
            tmp.remove(tmp.size()-1);
            nowsum -= root.val;
            return; // 一个add一个remove,由于提前return走不到下面remove,所以需要remove
        }
        if (root.left!=null) {
            dfs(root.left);
        }
        if (root.right!=null){
            dfs(root.right);
        }
        tmp.remove(tmp.size()-1);
        nowsum -= root.val;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-15 17:17
听说过付费实习,没想到这么贵啊我去,要不我给你个腰子吧
哈哈哈,你是老六:这种公司一定要注意啊,不要随便签合同,只要签了后面钱可能回不来,而且你通过法律途径也弄不回
点赞 评论 收藏
分享
代码飞升:别用口语,后端就写后端,前端就写前端,最后别光后悔
点赞 评论 收藏
分享
牛客38347925...:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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