- 二叉树的所有路径
已解答
简单
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5]
输出:[“1->2->5”,“1->3”]
示例 2:
输入:root = [1]
输出:[“1”]
提示:
树中节点的数目在范围 [1, 100] 内
-100 <= Node.val <= 100
#include <iostream>
#include <vector>
#include <string>
using namespace std;// 定义二叉树节点结构
struct TreeNode {int val; // 节点值TreeNode* left; // 左子树指针TreeNode* right; // 右子树指针TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} // 构造函数
};class Solution {
public:vector<string> answer; // 用于存储所有根到叶子的路径/*** 递归函数 collect_path: 收集从根到叶子的路径* @param root 当前遍历的节点* @param path 当前路径的字符串表示*/void collect_path(TreeNode* root, string path) {// 递归终止条件:如果当前节点是叶子节点(没有左子树和右子树)if (root->left == nullptr && root->right == nullptr) {answer.push_back(path); // 将完整路径存入答案数组return;}// 递归向左子树延伸路径if (root->left != nullptr)collect_path(root->left, path + "->" + to_string(root->left->val));// 递归向右子树延伸路径if (root->right != nullptr)collect_path(root->right, path + "->" + to_string(root->right->val));}/*** 计算二叉树的所有根到叶子的路径* @param root 二叉树的根节点* @return 包含所有路径的字符串数组*/vector<string> binaryTreePaths(TreeNode* root) {// 如果根节点为空,直接返回空数组if (root == nullptr)return {};// 从根节点开始递归遍历collect_path(root, to_string(root->val));// 返回最终答案return answer;}
};// 测试代码
int main() {// 创建一个二叉树:// 1// / \// 2 3// \// 5TreeNode* root = new TreeNode(1);root->left = new TreeNode(2);root->right = new TreeNode(3);root->left->right = new TreeNode(5);// 计算二叉树的所有路径Solution sol;vector<string> result = sol.binaryTreePaths(root);// 输出所有路径for (const string& path : result) {cout << path << endl;}return 0;
}