题目描述

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

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

示例:

输入:

   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);
    }
}
pwrliang Algorithms, DFS, Tree ,

Leave a Reply

Your email address will not be published. Required fields are marked *