力扣 257. 二叉树的所有路径

题目来源:https://leetcode.cn/problems/binary-tree-paths/description/

 

 C++题解1:使用递归,声明了全局变量result,遇到叶子节点就将字符串添加到result中。

递归三步法:

1. 确认传入参数:当前节点+已有路径(字符串);

2. 确认终止条件:遇到叶子节点,即左右节点都为空时,将当前节点添加到路径中,再将此条路径添加到result中;

3. 确认单层递归逻辑:路径添加 “->”,分别获取左右子树的路径。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<string> result;void getlujing(TreeNode* node, string s) {if(node->left == nullptr && node->right == nullptr) {s = s + to_string(node->val);result.push_back(s);return ;}s = s + to_string(node->val) + "->";if(node->left) getlujing(node->left, s);if(node->right) getlujing(node->right, s);}vector<string> binaryTreePaths(TreeNode* root) {getlujing(root, "");return result;}
};

C++题解2(来自代码随想录):同样使用递归,明显看出回溯,对路径和result的调用均为引用。

class Solution {
private:void traversal(TreeNode* cur, vector<int>& path, vector<string>& result) {path.push_back(cur->val); // 中,中为什么写在这里,因为最后一个节点也要加入到path中 // 这才到了叶子节点if (cur->left == NULL && cur->right == NULL) {string sPath;for (int i = 0; i < path.size() - 1; i++) {sPath += to_string(path[i]);sPath += "->";}sPath += to_string(path[path.size() - 1]);result.push_back(sPath);return;}if (cur->left) { // 左 traversal(cur->left, path, result);path.pop_back(); // 回溯}if (cur->right) { // 右traversal(cur->right, path, result);path.pop_back(); // 回溯}}public:vector<string> binaryTreePaths(TreeNode* root) {vector<string> result;vector<int> path;if (root == NULL) return result;traversal(root, path, result);return result;}
};

C++题解3(来自代码随想录):迭代法,除了模拟递归需要一个栈,同时还需要一个栈来存放对应的遍历路径。

class Solution {
public:vector<string> binaryTreePaths(TreeNode* root) {stack<TreeNode*> treeSt;// 保存树的遍历节点stack<string> pathSt;   // 保存遍历路径的节点vector<string> result;  // 保存最终路径集合if (root == NULL) return result;treeSt.push(root);pathSt.push(to_string(root->val));while (!treeSt.empty()) {TreeNode* node = treeSt.top(); treeSt.pop(); // 取出节点 中string path = pathSt.top();pathSt.pop();    // 取出该节点对应的路径if (node->left == NULL && node->right == NULL) { // 遇到叶子节点result.push_back(path);}if (node->right) { // 右treeSt.push(node->right);pathSt.push(path + "->" + to_string(node->right->val));}if (node->left) { // 左treeSt.push(node->left);pathSt.push(path + "->" + to_string(node->left->val));}}return result;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/522.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

尚硅谷大数据Flink1.17实战教程-笔记02【Flink部署】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据Flink1.17实战教程-笔记01【Flink概述、Flink快速上手】尚硅谷大数据Flink1.17实战教程-笔记02【Flink部署】尚硅谷…

前后端实现:行为验证码---文字点选

最近接到一个新的需求&#xff0c;由于客户是内网&#xff0c;你能使用腾讯的验证码了&#xff0c;需要改为前后端实现。 具体的代码已经提交git 项目效果图&#xff1a; 使用的技术栈&#xff1a;vitevue3ts git地址&#xff1a;https://github.com/susanliy/point_captcha…

VSCode自定义个性化console.log,快捷打印

最终效果&#xff0c;通过Ctrl Alt l快捷键打印选中值 如何自定义Console.log样式&#xff1f; 可以使用 %c 为打印内容定义样式&#xff1a; console.log("This is %cMy stylish message", "color: yellow; font-style: italic; background-color: blue;pa…

seaborn柱状图显示数值

文章目录 问题结局 问题 画柱状图希望显示每个柱的具体数值 结局 增加这个函数 # orient"v"是纵向&#xff0c;h是横向, space是字离柱的距离 def show_values(axs, orient"v", space.01):def _single(ax):# 精度acc {:.2f}if orient "v":…

Oculus创始人谈Vision Pro:苹果在硬件设计、营销都做对了选择

早在Vision Pro正式发布之前&#xff0c;Oculus创始人Palmer Luckey就已经体验过早期版本&#xff0c;并给出了极高的评价。Luckey指出&#xff0c;苹果在XR头显上的策略是明智的&#xff0c;先打造出每个人预期中的头显&#xff0c;然后再去考虑如何让大家买得起。 Vision Pro…

ModaHub魔搭社区:Milvus 监控指标和使用 Grafana 展示 Milvus 监控指标

目录 Milvus 监控指标 Milvus 性能指标 系统运行指标 硬件存储指标 Milvus 监控指标 Milvus 会生成关于系统运行状态的详细时序 metrics。你可以通过 Prometheus、Grafana 或任何可视化工具展现以下指标&#xff1a; Milvus 性能指标系统运行指标&#xff1a;CPU/GPU 使用…

Python+ddt+Excel实现接口自动化测试生成完美测试报告

接口自动化测试是指通过编写代码或使用工具&#xff0c;模拟用户发送请求&#xff0c;验证接口是否符合设计规范和功能需求的过程。” 如何用 python ddtexcel 实现接口自动化测试 接口自动化测试可以提高测试效率和质量&#xff0c;节省测试成本和时间&#xff0c;保证测试覆…

【前端工程化】Verdaccio搭建本地npm仓库

背景 Verdaccio 是一个 Node.js创建的轻量的私有npm proxy registry 我们在开发npm包的时候&#xff0c;经常需要验证发包流程&#xff0c;或者开发的npm包仅局限于公司内部使用时&#xff0c;就可以借助Verdaccio搭建一个npm仓库&#xff0c;搭建完之后&#xff0c;只要更改np…

【微服务】微服务架构设计

文章目录 背景一、流量入口Nginx二、网关三、业务组件四、服务注册中心五、缓存和分布式锁六、数据持久层七、结构型数据存储八、消息中间件九、日志收集十、任务调度中心十一、分布式对象存储 背景 当前&#xff0c;微服务架构在很多公司都已经落地实施了&#xff0c;下面用一…

C++学习 程序控制结构

程序控制结构 以某种顺序执行的一系列动作&#xff0c;用于解决某个问题。包括 顺序结构、选择结构、循环结构。 顺序结构 按照顺序正常执行。前几篇文章的代码都是顺序结构的体现。 选择结构 执行满足条件的语句。 if 结构&#xff1a;if (表达式){} 表达式为真则执行&…

python接口自动化(三)--如何设计接口测试用例(详解)

简介 上篇我们已经介绍了什么是接口测试和接口测试的意义。在开始接口测试之前&#xff0c;我们来想一下&#xff0c;如何进行接口测试的准备工作。或者说&#xff0c;接口测试的流程是什么&#xff1f;有些人就很好奇&#xff0c;接口测试要流程干嘛&#xff1f;不就是拿着接口…

【kubernetes系列】Kubernetes之pod、lable和annotation

本章节将继续分享关于kubernetes中的一些重要概念。 一、Pod Pod 是 Kubernetes 的最小工作单元。每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到某个 Node 上运行。(可以把pod想象成豌豆荚&#xff0c;里面的豌豆就是容器&#xff0c;可以有一个…