一、题目描述
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入:
1
/ \
2 3
\
5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
二、解题思路
在递归遍历二叉树时,需要考虑当前的节点和它的孩子节点。如果当前的节点不是叶子节点,则在当前的路径末尾添加该节点,并递归遍历该节点的每一个孩子节点。如果当前的节点是叶子节点,则在当前的路径末尾添加该节点后,就得到了一条从根节点到叶子节点的路径,可以把该路径加入到答案中。
三、代码实现
#include<string>
#include<vector>
using namespace std;
class Solution {
public:
void constructPath(TreeNode* root, string path, vector<string>& paths) {
if (root != nullptr) {
path.append(std::to_string(root->val));
// 当前是叶子节点
if ((root->left == nullptr) && (root->right == nullptr)) {
paths.push_back(path); // 把路径加入到答案中
} else { // 当前不是叶子节点
path.append("->");
constructPath(root->left, path, paths);
constructPath(root->right, path, paths);
}
}
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> paths;
string path = "";
constructPath(root, path, paths);
return paths;
}
};
四、总结
en...树的题目很有意思...多刷多刷...
参考链接:https://leetcode-cn.com/problems/binary-tree-paths/solution/er-cha-shu-de-suo-you-lu-jing-by-leetcode/