题目链接:
思路:边遍历边记录节点,如果节点和等于目标值,则在全局变量中加入路径
需要注意的点:
1. 因为arrayList传入方法后会产生永久性改变,所以要进行回溯,否则会将所有节点记录
2. 因为定义的一个对象就对应一个特定的对象,所以在存入全局变量时需要新建立对象,否则存入的只是指针,在后续的操作中存入的数据也会改变
实现源码:
package niuke; import java.util.ArrayList; public class 二叉树中和为某一值的路径 { private ArrayList<ArrayList<Integer>> list = new ArrayList<>(); public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) { find_path_by_inOrder(new ArrayList<Integer>(),root,target,0); return this.list; } private void find_path_by_inOrder(ArrayList<Integer> list ,TreeNode root,int target,int sum){ if(root==null){ list.add(0); return; } list.add(root.val); sum += root.val; if(root.right==null&&root.left==null&&sum==target){//确定是叶子结点 this.list.add(new ArrayList<Integer>(list)); //注意此处加进去的列表一定要新建,否则加进去的只是指针,后来全部一样 return; }else if(root.right==null&&root.left==null) return; find_path_by_inOrder(list,root.left,target,sum); list.remove(list.size()-1); find_path_by_inOrder(list, root.right, target, sum); list.remove(list.size()-1); } }
代码已经ac
希望对大家有所帮助
以上