递归求解,要想从根节点的所有路径,就要先获得左子树中的所有路径,再获得右子树中的所有路径,然后把根节点的值接在上面即可
因此问题变为了获得左子树中的所有路径和右子树中的所有路径
终止条件,到达叶子节点之后返回其值即可
思路
code
public List<String> binaryTreePaths(TreeNode root) {
//用于保存答案
List<String> res = new ArrayList<>();
//判断是否为null
if(root == null)
return res;
//判断是否到达了叶子节点 如果到了叶子节点 则将其加入数组 并返回
if(root.left==null&&root.right==null){
res.add(""+root.val);
return res;
}
//调用左子树
List<String> leftS = binaryTreePaths(root.left);
//遍历左子树的所有路径 加上本层的值
for(int i=0;i<leftS.size();i++)
res.add(root.val+"->"+leftS.get(i));
//遍历右子树 加上本层的值
List<String> rightS = binaryTreePaths(root.right);
for(int i=0;i<rightS.size();i++)
res.add(root.val+"->"+rightS.get(i));
//返回以root为根节点的所有路径
return res;
}