递归的思路

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

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

public class Solution {
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        if(root == null)
            return res;
        if(root.left == null && root.right == null && root.val == target){//每次递归到叶子节点就把节点添加到路径中,要保证
            ArrayList<Integer> t = new ArrayList<>();
            t.add(target);
            res.add(t);
            return res;
        }
        ArrayList<ArrayList<Integer>> rL = FindPath(root.left,target - root.val);
        ArrayList<ArrayList<Integer>> rR = FindPath(root.right,target - root.val);
        addF(rL,root.val);addF(rR,root.val);
        for(int i = 0;i < rR.size();i++)
            rL.add(rR.get(i));
        return rL;
    }
    public void addF(ArrayList<ArrayList<Integer>> a,int val){
        for(ArrayList<Integer> aa : a){
            aa.add(0,val);
        }
    }
}
  • 几个要点:
    • 想到要用递归,并且确定好递归每次结束的链表合并
    • 看到被人说的检验不检查是否按照长度排序,有空再回来看看有序合并
    • 递归思路:空节点直接返回,如果直接是叶子节点并且值和给定的target值相等,就直接产生一个长度为1的路径,然后添加到返回的只有一种路径的的总链表中;如果这两种情况都不满足,就减去根节点的值,递归调用左子树和右子树,合并起来,都加头节点然后返回
全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

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