# 题目
给你一个二叉树的根节点 root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]
示例 2:
输入:root = [1]
输出:["1"]
257. 二叉树的所有路径 - 力扣(LeetCode)
# 分析
这道题就是前序遍历加回溯,先遍历出一条路径然后回溯到上个分岔口继续向下遍历
递归
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; | |
} | |
}; |