171.二叉树:二叉树的所有路径(力扣)

发布于:2024-06-09 ⋅ 阅读:(157) ⋅ 点赞:(0)

代码解决

/**
 * 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 方法

    • 主函数,调用辅助递归函数生成所有路径。
    • 如果树为空,返回空的结果集。
    • 返回包含所有路径的结果集。

网站公告

今日签到

点亮在社区的每一天
去签到