首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Leetcode No.257 二叉树的所有路径

Leetcode No.257 二叉树的所有路径

作者头像
week
发布2021-05-06 16:04:53
发布2021-05-06 16:04:53
1.5K0
举报
文章被收录于专栏:用户画像用户画像

一、题目描述

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

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

示例:

输入:

1 / \ 2 3 \ 5

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

解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3

二、解题思路

最直观的方法是使用深度优先搜索。在深度优先搜索遍历二叉树时,我们需要考虑当前的节点以及它的孩子节点。

如果当前节点不是叶子节点,则在当前的路径末尾添加该节点,并继续递归遍历该节点的每一个孩子节点。 如果当前节点是叶子节点,则在当前路径末尾添加该节点后我们就得到了一条从根节点到叶子节点的路径,将该路径加入到答案即可。 如此,当遍历完整棵二叉树以后我们就得到了所有从根节点到叶子节点的路径。

三、代码

代码语言:javascript
复制
class Solution {
public:
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> paths;
        travel(root,"",paths);
        return paths;
    }
    void travel(TreeNode* root,string path,vector<string> &paths){
        if(root==nullptr){
            return;
        }
        if(root->left==nullptr && root->right==nullptr){
            path=path+to_string(root->val);
            paths.push_back(path);
            return;
        }
        path=path+to_string(root->val)+"->";
        travel(root->left,path,paths);
        travel(root->right,path,paths);
    }
};

四、复杂度分析

时间复杂度:O(N^2),其中 N 表示节点数目。在深度优先搜索中每个节点会被访问一次且只会被访问一次,每一次会对 path 变量进行拷贝构造,时间代价为 O(N),故时间复杂度为 O(N^2)

空间复杂度:O(N^2),其中 N表示节点数目。除答案数组外我们需要考虑递归调用的栈空间。在最坏情况下,当二叉树中每个节点只有一个孩子节点时,即整棵二叉树呈一个链状,此时递归的层数为 N,此时每一层的 path 变量的空间代价的总和为 O(

) = O(N^2),空间复杂度为 O(N^2)。最好情况下,当二叉树为平衡二叉树时,它的高度为logN,此时空间复杂度为 O((logN)^2)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目描述
  • 二、解题思路
  • 三、代码
  • 四、复杂度分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档