已解决
C++二叉树的所有路径
来自网友在路上 160860提问 提问时间:2023-11-01 19:43:35阅读次数: 60
最佳答案 问答题库608位专家为你答疑解惑
C++二叉树的所有路径
文章目录
- C++二叉树的所有路径
- 题目链接
- 题目描述
- 解题思路
- 代码:
题目链接
257. 二叉树的所有路径 - 力扣(LeetCode)
题目描述
给你一个二叉树的根节点
root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。
解题思路
使⽤深度优先遍历(DFS)求解。
路径以字符串形式存储,从根节点开始遍历,每次遍历时将当前节点的值加⼊到路径中,如果该节点为叶⼦节点,将路径存储到结果中。否则,将"->"加⼊到路径中并递归遍历该节点的左右⼦树。
定义⼀个结果数组,进⾏递归。递归具体实现⽅法如下:
1.如果当前节点不为空,就将当前节点的值加⼊路径path中,否则直接返回;
2.判断当前节点是否为叶⼦节点,如果是,则将当前路径加⼊到所有路径的存储数组paths中;
3.否则,将当前节点值加上"->"作为路径的分隔符,继续递归遍历当前节点的左右⼦节点。
4.返回结果数组。
- 特别地,我们可以只使⽤⼀个字符串存储每个状态的字符串,在递归回溯的过程中,需要将路径中的当前节点移除,以回到上⼀个节点。
具体实现方法:
1.定义⼀个结果数组和⼀个路径数组。
2.从根节点开始递归,递归函数的参数为当前节点、结果数组和路径数组 。
a.如果当前节点为空,返回。
b.将当前节点的值加⼊到路径数组中。
c.递归遍历当前节点的左⼦树。
d.如果当前节点为叶⼦节点,将路径数组中的所有元素拼接成字符串,并将该字符串存储到结果数组中。
e.递归遍历当前节点的右⼦树。
f.回溯,将路径数组中的最后⼀个元素移除,以返回到上⼀个节点。
3.返回结果数组。
代码:
class Solution {vector<string> vs; public:vector<string> binaryTreePaths(TreeNode* root) {string path;dfs(root, path);return vs;}void dfs(TreeNode* root, string path){if(root == nullptr) return;//非叶子节点string tmp = path + to_string(root->val) + "->";dfs(root->left, tmp);//叶子节点if(root->left == nullptr && root->right == nullptr){path.append(to_string(root->val));vs.push_back(path);}dfs(root->right, tmp);} };
查看全文
99%的人还看了
相似问题
- 〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性
- Java 算法篇-链表的经典算法:判断回文链表、判断环链表与寻找环入口节点(“龟兔赛跑“算法实现)
- 代码随想录二刷 | 链表 | 删除链表的倒数第N个节点
- 节点导纳矩阵
- bhosts 显示节点 “unreach“ 状态
- 电子电器架构 —— 车载网关边缘节点总线转换
- 〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点
- 第四天||24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II
- CS224W5.1——消息传递和节点分类
- Vue报错解决Error in v-on handler: “Error: 无效的节点选择器:#div1“
猜你感兴趣
版权申明
本文"C++二叉树的所有路径":http://eshow365.cn/6-29559-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!