新手算法学习之路----二叉树(二叉树的路径和)
题目: 给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值
的路径。
一个有效的路径,指的是从根节点到叶节点的路径。
代码加思路:
public List<List<Integer>> binaryTreePathSum(TreeNode root, int target) { List<List<Integer>> Result = new ArrayList<>(); List<Integer> path= new ArrayList<Integer>(); if(root == null){ return Result; } path.add(root.val); helper(Result, path,root.val,target,root); //这里的根节点的值我一开始忘记加了,这是我的一个错误 return Result; } private void helper(List<List<Integer>>Result, List<Integer>path, int sum, int target, TreeNode root){ if(root.left == null&&root.right == null){//判断已到达了叶子节点,如果到达了叶子节点的话还没有和sum相等的话那就放弃这个path数组 if(sum == target){ Result.add(new ArrayList<Integer>(path)); } return; } if(root.left!= null){ //左子树 path.add(root.left.val); helper(Result,path, sum+root.left.val, target,root.left); path.remove(path.size()-1); //这个remove的作用是,如果找到了sum==target的路径的话,由于每一在遍历左子树的时候就已经把每一个节点add到path数组里面了,在最后一个节点那里也已经将path值添加到了Result值里面了,所以要将path清空留个下一个右节点。同时要想合理的删除path里面的内荣最好的办法就是从后往前删,这是remove的一个弊端。 } if(root.right != null){ path.add(root.right.val); helper(Result,path,sum+root.right.val, target, root.right); path.remove(path.size()-1); } }