题目描述
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", "1->3"] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
https://leetcode-cn.com/problems/binary-tree-paths/
解法1
这道题目很简单,我们只需要先序遍历二叉树,把经过的节点都记录下来就可以了。唯一需要注意的是问题是,我们需要使用“->”连接路过的节点,当遇到叶节点时,我们不应该添加“->”。
我们要遍历全部节点,所以时间复杂度为O(n);当树为链表形态时,栈当深度最深,空间复杂度为O(n)。全部代码如下:
import java.util.ArrayList;
import java.util.List;
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> ans = new ArrayList<>();
if (root == null)
return ans;
helper(root, ans, "");
return ans;
}
// 要确保参数node为非空
private void helper(TreeNode node, List<String> ans, String path) {
if (node.left == null && node.right == null) {
ans.add(path + node.val);
return;
}
path = path + node.val + "->";
if (node.left != null)
helper(node.left, ans, path);
if (node.right != null)
helper(node.right, ans, path);
}
}