面试题:二叉树中和为某一路径
题目描述:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
思路1:递归
import java.util.ArrayList; public class Solution { //如果放在里面的话每次递归的时候就会重新new一个listALL和list, //这样会把上一步的结果覆盖,所以必须写在外面 ArrayList<ArrayList<Integer>> listAll=new ArrayList<>(); ArrayList<Integer> list=new ArrayList<>(); public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { if(root==null) return listAll; list.add(root.val); target=target-root.val; //表示建立新表 原来的已经是一条路径 if(target==0&&root.left==null&&root.right==null) listAll.add(new ArrayList<Integer>(list)); FindPath(root.left,target); FindPath(root.right,target); list.remove(list.size()-1); return listAll; } }
思路2:带记忆的DFS
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步