* 给定一个二叉树,返回所有从根节点到叶子节点的路径。
* 说明: 叶子节点是指没有子节点的节点。
* 示例:
* 输入:
* 1
* / \
* 2 3
* \
* 5
* 输出: ["1->2->5", "1->3"]
* 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
解题思路:
直接暴力DFS。
由于要返回每次的路线,因此需要维护一个额外的path集合来存储沿途走过的节点。每次搜索路过的节点都给丢到path集合中,直到遇到叶子节点了,就把这条路径表示出来存到结果集合中。
需要注意的是,在搜索完一条路后,转而去搜索其他路线时,要回溯还原现场。
class Solution {
private List<String> res = new ArrayList<>();
private List<Integer> path = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
dfs(root);
return res;
}
private void dfs(TreeNode root){
if(root == null)
return;
path.add(root.val);
if(root.left == null && root.right == null){
res.add(collection2String(path));
}
dfs(root.left);
dfs(root.right);
path.remove(path.size()-1);
}
String collection2String(List<Integer> path){
StringBuilder sb = new StringBuilder();
for(int i=0; i<path.size(); i++){
sb.append(path.get(i));
if(i != path.size()-1){
sb.append("->");
}
}
return sb.toString();
}
}
|