查看: 75|回复: 0

力扣1008题 解题思路和步骤 C++实现带注释

[复制链接]
  • TA的每日心情

    昨天 14:37
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    15

    主题

    0

    回帖

    22

    积分

    新手上路

    Rank: 1

    积分
    22
    发表于 2025-5-26 23:11:39 | 显示全部楼层 |阅读模式
    一、题目理解

    力扣1008题要求我们根据给定的二叉树前序遍历结果构造出一棵二叉树。前序遍历是指先访问根节点,递归地遍历左子树,递归地遍历右子树。

    关键词:二叉树,前序遍历,构造,C++实现


    二、解题思路

    解题思路主要分为以下几步:

    1. 确定根节点:前序遍历的第一个元素一定是根节点。

    2. 构建左右子树:根据根节点,将剩余的前序遍历序列分割为左右子树两部分。

    3. 递归实现:对左右子树递归执行上述步骤,直到所有节点都被创建。


    三、C++代码实现
    1. // 定义二叉树节点结构体
    2. struct TreeNode {
    3.     int val;
    4.     TreeNode left;
    5.     TreeNode right;
    6.     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    7. };

    8. // 递归函数,用于构造二叉树
    9. TreeNode buildTree(vector& preorder, int& index) {
    10.     if (index >= preorder.size()) return nullptr; // 如果索引超出范围,返回空指针
    11.     int value = preorder[index]; // 当前根节点的值
    12.     TreeNode root = new TreeNode(value); // 创建根节点
    13.     index++; // 移动到下一个元素

    14.     // 构建左子树
    15.     root->left = buildTree(preorder, index);

    16.     // 构建右子树
    17.     root->right = buildTree(preorder, index);

    18.     return root; // 返回根节点
    19. }

    20. // 主函数,用于调用递归函数
    21. TreeNode bstFromPreorder(vector& preorder) {
    22.     int index = 0; // 初始化索引
    23.     return buildTree(preorder, index); // 调用递归函数
    24. }
    复制代码

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表