题解 | #二叉树中和为某一值的路径(二)#
二叉树中和为某一值的路径(二)
https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca
1. 记录搜索路径——深度优先遍历——递归
public class Solution { //全局变量 LinkedList<Integer> path = new LinkedList<>(); ArrayList<ArrayList<Integer>> arr = new ArrayList<>(); public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int expectNumber) { dfs(root,expectNumber); return arr; } public void dfs(TreeNode root,int num){ if(root==null)return; path.add(root.val); num-=root.val; if(root.left==null&&root.right==null&&num==0){ //path全局变量,故在此需要new一个空间来存放path的值 arr.add(new ArrayList<>(path)); } //若叶子结点,则不进入下面两个递归,从path中清除此叶子结点 //深度优先,从最左侧搜索 dfs(root.left,num);//左右子树分别再递归,重复这个过程 dfs(root.right,num);//将问题分治到每个小子树 //递归处理类似于栈,先处理完叶子结点,子结点递归结束被删除后,继续进行下一步 //删除本结点(回退到上一层) path.removeLast(); } }