image.png
递归求解,要想从根节点的所有路径,就要先获得左子树中的所有路径,再获得右子树中的所有路径,然后把根节点的值接在上面即可
因此问题变为了获得左子树中的所有路径和右子树中的所有路径
终止条件,到达叶子节点之后返回其值即可

思路

image.png
对于左子树的递归过程
image.png
右子树的递归过程
image.png

code

  1. public List<String> binaryTreePaths(TreeNode root) {
  2. //用于保存答案
  3. List<String> res = new ArrayList<>();
  4. //判断是否为null
  5. if(root == null)
  6. return res;
  7. //判断是否到达了叶子节点 如果到了叶子节点 则将其加入数组 并返回
  8. if(root.left==null&&root.right==null){
  9. res.add(""+root.val);
  10. return res;
  11. }
  12. //调用左子树
  13. List<String> leftS = binaryTreePaths(root.left);
  14. //遍历左子树的所有路径 加上本层的值
  15. for(int i=0;i<leftS.size();i++)
  16. res.add(root.val+"->"+leftS.get(i));
  17. //遍历右子树 加上本层的值
  18. List<String> rightS = binaryTreePaths(root.right);
  19. for(int i=0;i<rightS.size();i++)
  20. res.add(root.val+"->"+rightS.get(i));
  21. //返回以root为根节点的所有路径
  22. return res;
  23. }