二叉树的所有路径
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200417130947905.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1pIT1VKSUFOX1RBTks=,size_16,color_FFFFFF,t_70)
递归+回溯
:此题只需要使用深度优先遍历算法,每次遍历到一个节点 就把该节点的值存入到String中,然后判断是否为叶子节点,
如果为叶子节点就需要把这条路径添加到list中。
本题需要注意string的用法,并且要注意对于String而言,我们采用的是赋值的方式
这就不意味着每次调用这个函数就会创建一个新的String,并且还会在调用的时候把上一个String的值传给它
这就意味着每个函数中 的s都不同
List<String> list = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
if(root==null) return list;
dfs(root,"");
return list;
}
public void dfs(TreeNode root,String s){
if(root==null) return;
s+=root.val;
if(root.left==null&&root.right==null){
list.add(s);
}else{
dfs(root.left,s+"->");
dfs(root.right,s+"->");
}
}