美文网首页
24、二叉树中和为某一值的路径

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

作者: quiterr | 来源:发表于2017-09-02 21:44 被阅读0次

    题目描述
    输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

    本题注意点:

    • 递归结束后返回父节点
    • ArrayList的拷贝
    import java.util.ArrayList;
    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
            ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
            if(root==null){
                return lists;
            }
            ArrayList<Integer> list = new ArrayList<>();
            FindPath(root,target,list,lists);
            return lists;
        }
        
        int curr = 0;
        
        public void FindPath(TreeNode root,int target, ArrayList<Integer> list,ArrayList<ArrayList<Integer>> lists) {
            if(root!=null){
                curr+=root.val;
                list.add(root.val);
            }
            //到达叶子节点
            if(root.left==null&&root.right==null){
                if(curr==target){
                    //这里必须new一个list来保存结果
                    ArrayList<Integer> list2 = new ArrayList<>();
                    list2 = (ArrayList<Integer>)list.clone();
                    lists.add(list2);
                }
            }
            
            if(root.left != null)
                FindPath(root.left,target,list,lists);
            if(root.right != null)
                FindPath(root.right,target,list,lists);
            
            //递归会返回到父节点,在此之前删掉本节点
            curr-=root.val;
            list.remove(list.size()-1); 
        }
    }
    

    相关文章

      网友评论

          本文标题:24、二叉树中和为某一值的路径

          本文链接:https://www.haomeiwen.com/subject/dduqwttx.html