LeetCode 257. 二叉树的所有路径,dfs

LeetCode 257. 二叉树的所有路径

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

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

目录

算法选择

  • 深度优先搜索(DFS)

数据结构

  • 字符串(用于构建路径)

解题步骤

  1. 初始化空字符串数组存储路径
  2. 从根节点开始DFS
  3. 在DFS中构建路径
  4. 到达叶子节点时,将路径添加到结果数组
  5. 返回结果数组
  6. 初始化:创建一个字符串数组paths来存储所有路径。

DFS函数:定义一个递归函数dfs(node, path),其中node是当前节点,path是从根到当前节点的路径。

如果node是叶子节点(即没有左右子节点),将path添加到paths数组中。

如果node有左子节点,递归调用dfs(node->left, path + "->" + to_string(node->val))。

如果node有右子节点,递归调用dfs(node->right, path + "->" + to_string(node->val))。

调用DFS:从根节点开始调用dfs(root, "")。

算法流程

是 否 开始 初始化paths数组 调用dfs root, 判断node是否为叶子节点 将path添加到paths 递归调用dfs node->left,path 递归调用dfs node->right,path 返回paths数组 结束

算法代码

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    void dfs(TreeNode* node, string path, vector<string>& paths) {
        if (!node) return;
        path += to_string(node->val);
        if (!node->left && !node->right) {
            paths.push_back(path);
        } else {
            path += "->";
            dfs(node->left, path, paths);
            dfs(node->right, path, paths);
        }
    }
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> paths;
        string path;
        dfs(root, path, paths);
        return paths;
    }
};

算法分析

  • 时间复杂度 :O(N2),其中N是树中节点的数量。对于每个节点,我们都需要生成其路径,这需要O(N)的时间,因此总的时间复杂度是O(N2)。
  • 空间复杂度:O(N^2),因为我们需要存储所有路径,每个路径的平均长度是O(N)。

易错点和注意事项

  • 确保在递归调用时正确地构建路径。
  • 避免在非叶子节点处添加路径。
  • 注意递归的终止条件。

相似题目

题目编号 题目名称 题目链接
113 路径总和 II 链接
129 求根到叶子节点数字之和 链接
437 路径总和 III 链接
112 路径总和 链接
相关推荐
蒸汽求职3 分钟前
低延迟系统优化:针对金融 IT 与高频交易,如何从 CPU 缓存行(Cache Line)对齐展现硬核工程底蕴?
sql·算法·缓存·面试·职场和发展·金融·架构
田梓燊5 分钟前
leetcode 239
数据结构·算法·leetcode
CoderCodingNo8 小时前
【NOIP】2011真题解析 luogu-P1003 铺地毯 | GESP三、四级以上可练习
算法
iFlyCai9 小时前
C语言中的指针
c语言·数据结构·算法
Laurence9 小时前
C++ 引入第三方库(一):直接引入源文件
开发语言·c++·第三方库·添加·添加库·添加包·源文件
查古穆9 小时前
栈-有效的括号
java·数据结构·算法
再一次等风来9 小时前
近场声全息(NAH)仿真实现:从阵列实值信号到波数域重建
算法·matlab·信号处理·近场声全息·nah
汀、人工智能9 小时前
16 - 高级特性
数据结构·算法·数据库架构·图论·16 - 高级特性
大熊背9 小时前
利用ISP离线模式进行分块LSC校正的方法
人工智能·算法·机器学习