代码解决
/** * 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 { // 辅助递归函数,生成从根节点到叶节点的路径 void traversal(TreeNode* root, string path, vector<string>& result) { // 将当前节点的值添加到路径中 path += to_string(root->val); // 如果当前节点是叶节点,添加路径到结果中 if (root->left == nullptr && root->right == nullptr) { result.push_back(path); return; } // 处理左子树 if (root->left) { path += "->"; // 添加箭头到路径 traversal(root->left, path, result); path.pop_back(); // 移除箭头的最后一个字符 '-' path.pop_back(); // 移除箭头的最后一个字符 '>' } // 处理右子树 if (root->right) { path += "->"; // 添加箭头到路径 traversal(root->right, path, result); path.pop_back(); // 移除箭头的最后一个字符 '-' path.pop_back(); // 移除箭头的最后一个字符 '>' } } public: // 主函数,生成二叉树所有从根节点到叶节点的路径 vector<string> binaryTreePaths(TreeNode* root) { vector<string> result; // 保存所有路径的结果 string path; // 保存当前路径 if (root == nullptr) return result; // 如果树为空,返回空结果 traversal(root, path, result); // 调用辅助递归函数 return result; // 返回所有路径 } };
TreeNode 结构体定义:
val
:节点的整数值。left
:指向左子节点的指针。right
:指向右子节点的指针。Solution 类:
- 包含一个辅助递归函数
traversal
和一个主函数binaryTreePaths
。traversal 方法:
- 递归生成从根节点到叶节点的路径。
- 将当前节点的值添加到路径中。
- 如果当前节点是叶节点,将路径添加到结果集中。
- 递归处理左子树和右子树,分别添加箭头到路径中,并在递归结束后移除箭头。
binaryTreePaths 方法:
- 主函数,调用辅助递归函数生成所有路径。
- 如果树为空,返回空的结果集。
- 返回包含所有路径的结果集。