当前位置: 首页 > article >正文

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

LeetCode 257. 二叉树的所有路径

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

说明: 叶子节点是指没有子节点的节点。
在这里插入图片描述

目录

  • 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数组
结束

算法代码

/**
 * 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路径总和链接

http://www.kler.cn/a/319166.html

相关文章:

  • jmeter常用配置元件介绍总结之定时器
  • 【含开题报告+文档+PPT+源码】基于Spring Boot智能综合交通出行管理平台的设计与实现
  • AI 写作(五)核心技术之文本摘要:分类与应用(5/10)
  • 鸿蒙自定义UI组件导出使用
  • AI 扩展开发者思维方式:以 SQL 查询优化为例
  • 实时渲染技术如何助力3D虚拟展厅?
  • 29. RabbitMQ队列模型
  • 多用户自定义商城小程序源码系统 独立部署 到源代码包以及搭建部署教程
  • 根据源码解析Vue2中对于对象的变化侦测
  • 搭建HAproxy----7层负载均衡集群
  • FDA辅料数据库在线免费查询-药用辅料
  • 灵当CRM multipleUpload.php 文件上传致RCE漏洞复现
  • 双11好物推荐有哪些?五大双十一好货推荐!
  • PHP如何从字符串中删除转义字符
  • 抽奖拼团卷轴模式系统开发小程序源代码解析
  • Flask 第十二课 -- 错误处理
  • 下水道内缺陷识别检测数据集 yolo数据集 共2300张
  • LeetCode2207解题思路
  • 双十一买什么好?五款数码好物推荐!
  • 毕业设计选题:基于ssm+vue+uniapp的面向企事业单位的项目申报小程序
  • 1.3 MySql的用户管理
  • 电脑如何录屏?无水印、高清晰度电脑录屏教程
  • 『功能项目』QFrameWork道具栏物品生成【64】
  • thinkphp8 从入门到放弃(后面会完善用到哪里写到哪)
  • C#图像爬虫实战:从Walmart网站下载图片
  • python常见的魔术方法