【Leetcode】257.二叉树的所有路径

257.二叉树的所有路径

题目

给定一个二叉树,返回所有从根节点到叶子节点的路径。

说明: 叶子节点是指没有子节点的节点。

示例:
输入:

    1
  /   \
 2     3
  \
   5

输出: ["1->2->5", "1->3"]

方法(深度优先搜索)

对以root为根节点的树进行深度优先遍历,搜索从root到叶节点的路径:

  • 如果遍历到了叶子节点,则在当前路径的结尾处添加该节点,并将目前的整条路经加到结果数组中
  • 如果当前遍历不是叶子节点,则在当前路径的结尾处添加该节点,继续遍历其子节点

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution{
private List<String> res = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
if(root == null)
return res;
dfs(root, "");
return res;
}
//搜索以node为起始的到叶节点的路径
//cur为到达node前所经历过的路径
public void dfs(TreeNode node, String cur){
if(node == null)
return;
cur += Integer.toString(node.val);
if(node.left == null && node.right == null){
res.add(cur);
}
else{
cur += "->";
dfs(node.left, cur);
dfs(node.right, cur);
}
}
}