二叉树的OJ练习(二)

通过前序遍历数组构建二叉树

题目:通过前序遍历的数组(ABD##E#H##CF##G##)构建二叉树

TreeNode* TreeCreat(char* a,int* pi)
{if(a[*pi] == '#'){(*pi)++;return NULL;    }TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));if(root == NULL){perror("malloc fail");exit(-1);}root->data = a[(*pi)++];root->left = TreeCreat(a,pi);root->right = TreeCreat(a,pi);return root; 
}

解释:

1、 pi表示数组下标,初始值为0,a表示前序遍历的数组

2、如果检测到数组中表示空的符号'#',那么就下标继续向前走,然后返回空,证明这一条路已经走到头了

3、如果检测到的不是'#',那么就为该结点开辟一个内存空间,同时做开辟失败的警告条件判断

4、开辟成功后向该内存空间中存放值,值的大小为a[(*pi)++](先使用*pi然后pi才会++,即下标向前走)

5、由于是根->左->右的前序遍历,所以应该先递归左子树,当整棵树的左子树走到底的时候就会读取到'#',然后就会返回NULL(由于我们已经知道了非空与空的位置,整个构建的过程就相当于一个填空的过程,所以我们再进行递归的时候,TreeCreat函数传递的是前序遍历数组a和数组下标pi的地址,而不是root->left和root->right,)

6、最后记得返回二叉树的根节点

 ~over~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot 2+Layui实现的管理后台系统源码+数据库+安装使用说明

springboot-plus 一个基于SpringBoot 2 的管理后台系统,包含了用户管理,组织机构管理,角色管理,功能点管理,菜单管理,权限分配,数据权限分配,代码生成等功能 相比其他开源的后台系统&#xff0…

Shutter的安装及使用

概要:本篇主要讲述截图软件Shutter的安装和使用,操作系统是Ubuntu22.04 一、安装 sudo apt install shutter 二、区域截图 1、打开Shutter,点击Selection 2、提示信息 3、框选矩形区域 按住鼠标左键,拖动鼠标,松…

Mysql的所有数据类型和它们的区别

一、数值类型 1. 普通整数数值类型 以下数据类型只能用以保存整数 整数数值类型类型存储大小(字节)有符号的取值范围(允许存在负数)无符号的取值范围TINYINT1-128 ~ 1270 ~ 255SMALLINT2- 327678 ~ 327670 ~ 65535MEDIUMINT3- 8…

FL Studio 21注册机激活码序列号下载 附激活码

FL Studio 21 keygen激活码序列号是一款基于同名软件激活程序。操作非常简单。用户只需使用本激活工具生成激活码,即可一键激活软件所有功能,无需付费。去购买注册程序,永久免费使用所有功能。很多用户应该都知道,专业的编辑工具只…

Python字典去重竟然比集合去重快速40多倍

这里写目录标题 对比代码结果图代码解析 对比代码 from glob import glob from tqdm import tqdm import time path_listglob("E:/sky_150b/任务组_20231207_2023/*.jsonl") # for two in tqdm(path_list): onepath_list[0]with open(one,"r",encoding&q…

常见web漏洞的流量分析

常见web漏洞的流量分析 文章目录 常见web漏洞的流量分析工具sql注入的流量分析XSS注入的流量分析文件上传漏洞流量分析文件包含漏洞流量分析文件读取漏洞流量分析ssrf流量分析shiro反序列化流量分析jwt流量分析暴力破解流量分析命令执行流量分析反弹shell 工具 攻击机受害机wi…

MyBatis 四大核心组件之 ResultSetHandler 源码解析

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

55.手写实现grpc连接池以及gin和grpc交互

文章目录 一、简介前置说明 二、敏感词过滤服务1、定义sensitive.proto文件2、protoc生成pb.go文件3、sensitive服务端实现 三、关键词匹配服务1、编写keywords.proto文件2、生成pb.go文件3、keywords服务端实现 四、gin web 路由服务1、新建grpcpool服务作为gin web服务2、根据…

论MYSQL注入的入门注解

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 📑什么是MySQL注入&…

【Qt开发流程】之容器类1:介绍及常用容器类和使用Java风格迭代器进行遍历

概述 Qt库提供了一组通用的基于模板的容器类。这些类可用于存储指定类型的项。例如&#xff0c;如果需要一个可调整大小的QString数组&#xff0c;可以使用QVector<QString>。 这些容器类被设计成比STL容器更轻、更安全、更易于使用。如果不熟悉STL&#xff0c;或者更喜…

坚鹏:中国邮政储蓄银行数字化转型战略、方法与案例培训

中国邮政储蓄银行拥有优良的资产质量和显著的成长潜力&#xff0c;是中国领先的大型零售银行。2016年9月在香港联交所挂牌上市&#xff0c;2019年12月在上交所挂牌上市。中国邮政储蓄银行拥有近4万个营业网点&#xff0c;服务个人客户超6.5亿户。2022年&#xff0c;在《银行家》…

Java 何时会触发一个类的初始化

Java 何时会触发一个类的初始化&#xff1f; 使用new关键字创建对象访问类的静态成员变量 或 对类的静态成员变量进行赋值调用类的静态方法反射调用类时&#xff0c;如 Class.forName()初始化子类时&#xff0c;会先初始化其父类&#xff08;如果父类还没有进行过初始化的话&a…