【牛客刷题专栏】0x0F:JZ7 重建二叉树(C语言编程题)

news2025/1/21 4:48:17

前言

  • 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失
  • 个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer:
    在这里插入图片描述

目录

  • 前言
  • 问题描述:
  • 举例:
  • 解法思路:
  • 代码结果:
  • 结束语


问题描述:

  • 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。
    例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。
    在这里插入图片描述
    提示:
    1.vin.length == pre.length
    2.pre 和 vin 均无重复元素
    3.vin出现的元素均出现在 pre里
    4.只需要返回根结点,系统会自动输出整颗树做答案对比
    数据范围:n≤2000,节点的值 −10000≤val≤10000
    要求:空间复杂度 O(n),时间复杂度 O(n)

举例:

//示例1:
//输入:
[1,2,4,7,3,5,6,8],[4,7,2,1,5,3,8,6]
//返回值:
{1,2,3,4,#,5,6,#,7,#,#,8}
//说明:返回根节点,系统会输出整颗二叉树对比结果,重建结果如题面图示  
//==========================
//示例2:
//输入:
[1],[1]
//返回值:
{1}
//==========================
//示例3:
//输入:
[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]
//返回值:
{1,2,5,3,4,6,7}

解法思路:

1.先序遍历第一个元素一定是当前的根节点。
2.中序遍历里,根节点的左侧一定是在根节点左边,右侧的一定是在右边。
基于以上两点,先将pre中第一个元素入根节点,然后遍历找到根节点在vin中的位置site。
root->lift 即遍历pre 1~site 和 vin 0-site 的内容。
root->right 即遍历pre (site + 1) ~ 7 和 vin (site + 1) ~ 7 的内容。


代码结果:

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pre int整型一维数组 
 * @param preLen int pre数组长度
 * @param vin int整型一维数组 
 * @param vinLen int vin数组长度
 * @return TreeNode类
 */
struct TreeNode* reConstructBinaryTree(int* pre, int preLen, int* vin, int vinLen ) {
    // write code here
    struct TreeNode* pRoot = 0;
    int iSite = 0;
    
    if ((NULL == pre) || (0 == preLen))
        return NULL;
    
    pRoot = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    memset(pRoot, 0, sizeof(struct TreeNode));
    pRoot->val = pre[0];
    while (pre[0] != vin[iSite])
    {
        iSite++;
    }
    pRoot->left = reConstructBinaryTree(pre + 1, iSite, vin, iSite);
    pRoot->right = reConstructBinaryTree(pre + iSite + 1, preLen - iSite - 1, vin + iSite + 1, vinLen - iSite - 1);
    
    return pRoot;
}


结束语

  • 以上就是该C语言编程题的内容。可以在牛客尝试刷几道题目来练习实践。牛客网刷题(点击可以跳转),可以尝试注册使用。
  • 题目来自:牛客/题库 / 在线编程 / 剑指offer:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/397595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VKL060 SSOP24超低功耗/抗干扰15*4 LCD液晶段码驱动IC,适用于传感器/数字压力表

产品型号:VKL060产品品牌:永嘉微电/VINKA封装形式:SSOP24产品年份:新年份原厂,工程服务,技术支持!VKL060概述:VKL060是一个点阵式存储映射的LCD驱动器,可支持最大60点(15…

【ROS学习笔记13】ROS中的TF坐标变换

【ROS学习笔记13】ROS中的TF坐标变换 文章目录【ROS学习笔记13】ROS中的TF坐标变换前言1. 静态坐标变换2. 动态坐标变换3. 多坐标变换4. 坐标系关系查看5. TF坐标变换实操Reference写在前面,本系列笔记参考的是AutoLabor的教程,具体项目地址在 这里 前言…

sqli-labs靶场实战

sqli-labs靶场实战 (手工)SQL注入基本步骤: 第一步:注入点测试 第二步:查询字段数 第三步:判断回显位 第四步:查询数据库的基本信息 第五步:爆数据库名 第六步:爆数据库…

ROS云课使用CoCubeSim案例

源码压缩包:https://gitcode.net/ZhangRelay/cocubesim打开蓝桥ROS云课:下载cocubesim压缩包:https://gitcode.net/ZhangRelay/cocubesim.git注意文件路径,home文件夹下的code文件夹里面。解压缩:tar -xf cocubesim/co…

黑马Linux笔记03【su、sudo、groupadd、useradd、usermod、userdel、getent、chmod、chown】

资源 视频地址:黑马-新版Linux快速入门到精通资源下载:https://pan.baidu.com/s/1zExrsk09QVm3mpqaPTqe_g?pwd6666,提取码:6666笔记 黑马Linux笔记01【安装VMware Workstation、安装CentOS7、远程连接Linux系统、Win10配置WSL(Ub…

机器学习算法: Logistic 回归 详解

动动发财的小手,点个赞吧! 1. 导读 逻辑回归是在因变量为二元时进行的回归分析。它用于描述数据并解释一个因二元变量与一个或多个名义、有序、区间或比率水平变量之间的关系。二元或二项式 Logistic 回归可以理解为处理其中因变量的观察结果只能是二元的…

Mac电脑,python+appium+安卓模拟器使用步骤

1、第一步,环境搭建,参考这位博主的文章,很齐全 https://blog.csdn.net/qq_44757414/article/details/128142859 我在最后一步安装appium-doctor的时候,提示权限不足,换成sudo appium-doctor即可 2、第二步&#xff0…

Discuz X3.1 QQ互联登陆报错解决方法

安装X3.1后QQ互联登陆出现(1054) Unknown column conuintoken in field list,具体截图如下: 原因是用QQ登陆的时候是把你的账号信息写入数据表common_member_connect中的,而这个语句中有conuintoken 这个字段,但数据表common_mem…

【Java基础】10分钟看懂Java NIO

一、IO概述IO的操作方式通常分为几种:同步阻塞BIO、同步非阻塞NIO、异步非阳塞AIO1、在JDK1.4之前,我们建立网络连接的时候采用的是 BIO 模式。2、Java NIO(New IO或Non Blocking IO) 是从Java 1.4版本开始引入的一个新的IOAPI,可以替代标准的Java IO AP…

跨域问题解决方案

目录 1.同源策略 2.解决方案(后端) (1)在后端方法添加CrossOrigin (2)添加CORS过滤器 (3)实现WebMvcConfigure接口,重写addCorsMappings方法 3.解决方案(前端) (1)前端配置代理 1.同源策略 同源策略(Same origin policy)是一种约定&am…

代码随想录算法训练营day53 | 动态规划之子序列 1143.最长公共子序列 1035.不相交的线 53. 最大子序和

day531143.最长公共子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组1035.不相交的线53. 最大子序和1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何…

【深入理解 线程池】

深入理解 线程池介绍源码学习线程池的类继承体系ThreadPoolExector核心数据结构核心配置参数线程池的执行流程如图:线程池的优雅关闭线程池的生命周期正确关闭线程池的步骤任务的提交过程分析任务的执行过程shutdonw() 与任务执行过程综合分析shutdonwNow() 与任务执…

python3.6 处理报错free(): invalid pointer

在运行脚本的时候遇到了这个报错,我在笔记本的win10 python3.7上正常运行,把程序考到服务器报了这个错,free(): invalid pointer 脚本里写了异常处理,用的是纯净的虚拟环境,所以我感觉问题是出在系统环境上 在网上搜…

Linux:tcp socket客户端和服务器端代码

服务器端代码&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <arpa/inet.h> #include <sys/un.h> #include <sy…

手工数据采集耗时耗力?Smartbi数据填报实现数据收集分析自动化

企业在日常经营管理过程中&#xff0c;往往需要收集很多内外部的信息&#xff0c;清洗整理后再进行存储、分析、呈现、决策支持等各种作业&#xff0c;如何高效收集结构化数据是企业管理者经常要面对的问题。传统手工的数据采集方式不仅耗费了大量人力时间成本&#xff0c;还容…

爽,我终于掌握了selenium图片滑块验证码

因为种种原因没能实现愿景的目标&#xff0c;在这里记录一下中间结果&#xff0c;也算是一个收场吧。这篇文章主要是用selenium解决滑块验证码的个别案列。 思路&#xff1a; 用selenium打开浏览器指定网站 将残缺块图片和背景图片下载到本地 对比两张图片的相似地方&#x…

【含源码】用python做游戏有多简单好玩

有很多同学问我还有其他什么小游戏吗&#xff0c;游戏是怎么做的&#xff0c;难不难。我就用两篇文章来介绍一下&#xff0c;如何使用Python做游戏。 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小游戏玩转不停↓ 更多小游戏可以评论区讨论哦&#xff0c;喜欢…

C中AES_cbc_encrypt加密对应java中的解密

前言知识&#xff1a; 1.AES&#xff08;Advanced Encryption Standard&#xff09;高级加密标准&#xff0c;作为分组密码&#xff08;把明文分成一组一组的&#xff0c;每组长度相等&#xff0c;每次加密一组数据&#xff0c;直到加密完整个明文&#xff09;。 2.在AES标准…

C#基础教程12 数组

文章目录 C# 数组(Array)C# 中的数组声明数组初始化数组赋值给数组访问数组元素C# 数组细节C# 数组(Array) 数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。 声明数组变量并不是声明 number0、number1…

【设计模式】工厂模式

工厂模式 所谓工厂&#xff0c;顾名思义&#xff0c;就是创建出一类相似的产品的&#xff0c;工厂模式可以帮我们创建各个复杂/简单对象。属于创建型模式。 工厂模式分为三类: 简单工厂工厂方法抽象工厂 简单工厂 比方说我们需要根据配置文件去解析配置&#xff0c;不同后…