Path Sum I、II

来源:互联网 发布:企业邮箱域名入口 编辑:程序博客网 时间:2024/05/16 19:20

Path Sum I


dfs加递归

public boolean hasPathSum(TreeNode root, int sum) {        return dfs(root,sum,0);    }        public boolean dfs(TreeNode root, int sum,int current) {        if(root == null)return false;        current += root.val;        if(root.left == null && root.right == null){            if(current == sum)return true;        }        return dfs(root.left,sum,current) || dfs(root.right,sum,current);    }

Path Sum II

 

同样用递归,注意的是,递归完成后,要把list中的最后一个数删除。深度遍历,遍历到叶子节点后(即得到一个答案后),要返回到该叶子节点的父节点,所以要把该list中的最后一个数remove。如二叉树(1,2,1,#,#,1,#),输入的参数是3,遍历到2时,得到一个list={1,2},然后要返回节点1,即remove 2 ,然后继续遍历得到另一个答案list={1,1,1}。

public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {        ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();        ArrayList<Integer> list = new ArrayList<Integer>();        recursive(root,sum,lists,list,0);        return lists;    }        public void recursive(TreeNode root, int sum,ArrayList<ArrayList<Integer>> lists,ArrayList<Integer> list,int add){        if(root == null){            return;        }        list.add(root.val);        add += root.val;        if(root.left==null && root.right==null){            if(add == sum){                lists.add(new ArrayList<Integer>(list));            }            return;        }        if(root.left!=null){            recursive(root.left,sum,lists,list,add);            list.remove(list.size() - 1);        }        if(root.right!=null){            recursive(root.right,sum,lists,list,add);            list.remove(list.size() - 1);        }    }


0 0
原创粉丝点击