题目链接
257. 二叉树的所有路径
题目描述
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5]
输出:[“1->2->5”,“1->3”]
示例 2:
输入:root = [1]
输出:[“1”]
提示:
- 树中节点的数目在范围 [1, 100] 内
- 100 <= Node.val <= 100
代码解答
public List<String> binaryTreePaths(TreeNode root) {
List<String> ret = new ArrayList<>();
def(root, "", ret);
return ret;
}
private void def(TreeNode root, String path, List<String> paths) {
if (root == null) {
return;
}
if (root.left == null && root.right == null) {
paths.add(path + root.val);
}
def(root.left, path + root.val + "->", paths);
def(root.right, path + root.val + "->", paths);
}
此处用了深度优先搜索,本质上就是遍历二叉树,只需要注意几个点:
- 返回的结果,即路径集合
- 根到每一个叶子结点的路径,即路径集合中的元素
所以本题使用的深度优先搜索的原理如下:
1.处理根节点,如果为空,直接返回
2.处理叶子结点,将值加入路径
3.处理非叶子节点,递归
总结
此题对使用dfs应该能够想到,在解题过程中,首先对特殊情况(根节点、叶子结点)进行处理,然后对一般情况直接递归。