题解 | #二叉树中和为某一值的路径#

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

http://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca

java解
1.判断某一条路径上的值相加是否为target,也就是要证明子节点路径上的值相加是否等于 target-root.val,(因为不能确定每个节点上存储的到底是正数还是负数,所以每一条路径我们都必须一直判断到叶子节点),通过这一点我们可以直接递归,一直到叶子节点,到叶子节点的时候,target - root.val == 0 ,就证明这个条路径是符合要求的。
2.我认为该题目的难点不是递归去判断每个节点。而是难在如何在递归的过程中去记录每个节点,每一条路径,因为每一条路径都有可能会有很多的左右分叉。
这里记录每一条路径的方法,我是这样解决的:首先存储每一个节点直接使用一个ArrayList list,当遇到了某一个节点有左节点时,就新建一个list 的拷贝listClone,递归左节点的时候就在listClone中去进行记录每个节点,递归右节点的时候在直接在list中去记录。

import java.util.*;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {

    ArrayList<ArrayList<Integer>> arrayList = new  ArrayList<ArrayList<Integer>>();
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
        if(root == null) return arrayList;
        Find(root,target,new ArrayList<Integer>());
        return arrayList;

    }


    public void Find(TreeNode root,int target,ArrayList list){
        target = target - root.val;
        list.add(root.val);

        if(root.left == null && root.right == null ){
            if( target == 0 ){
                arrayList.add(list);
            }
        }

        if(root.left != null){
            ArrayList<Integer> listClone = (ArrayList)list.clone();
            Find(root.left,target,listClone);
        }

        if(root.right != null){
            Find(root.right,target,list);
        }
    }

}
全部评论

相关推荐

机械打工仔:不管啥专业,找工作改简历的第一课先把你那排版改了,简历上不要写个人简历四个字,找你要简历的谁不知道这个是简历?而且还占那么多空间,直接把自己名字和基础信息写上面,整体字体大一些。 还有这种经典两页简历一页大空白,导出PDF的时候多了一页几乎全是白的你自己看着不难受吗随手的事为啥不能改掉呢,这是态度问题,你试想一下你是HR你打开简历看到格式都没调整过会是什么感受?你自己都不重视你的简历,HR更不会在意。 然后内容你那个做两年咖啡就别往里写了,简历在精不在多,你在往你的简历里打字的时候就要想好这东西对你要找的工作有没有帮助。自我评价写一行就行了,不如给专业技能单开一栏。核心课程均分90这个真别写了,把你上过的有用的专业课列出来也行。有很多地方废话很多的精炼一下,比如你校内项目第一个写的那些,全然没有重点。 好好修改一下,我看你内容也挺优秀的,别被一个随便做的简历耽误了,我一个同专业的打工人看了都揪心更别说一天看几百份简历的HR
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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