当前位置: 首页 > news >正文

二叉树的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.lryc.cn/news/257006.html

相关文章:

  • uni-app 微信小程序之自定义navigationBar顶部导航栏
  • 前端入门:HTML初级指南,网页的简单实现!
  • 低多边形3D建模石头材质纹理贴图
  • 【华为OD题库-081】最长的元音子串长度-Java
  • 第9节:Vue3 指令
  • B028-JDBC基础
  • ngixn 准备
  • 生活小记录
  • Diary22-全网最全的CSS3.0讲解
  • LAMP和分离式LNMP部署
  • 基于Java房屋租赁管理系统
  • windows安装protoc、protoc-gen-go、protoc-gen-go-grpc
  • macOS 获取文件夹大小
  • Ultimate VFX
  • 一个通用游戏后台的设计模式实践总结
  • Kubernetes - 为什么 K8S 在容器里不能调用自己?
  • 电机:有刷直流电机的原理
  • 小黑子——springBoot基础
  • Flink流批一体计算(24):Flink SQL之mysql维表实时关联
  • 鸿蒙(HarmonyOS)应用开发——从网络获取数据(题目答案)
  • 力扣:197. 上升的温度(Python3)
  • uniApp应用软件在运行时,不符合华为应用市场审核标准。解决方案合集!
  • c#编码技巧(十五):新语法糖record深入分析
  • Java IO流(五)(字符集基础知识简介)
  • 周周爱学习之Redis重点总结
  • 免费的SEO外链发布工具,提升排名的利器
  • 腾讯字节常考的linux命令
  • JAVA后端自学技能实操合集
  • C++ 关联容器
  • ES6之函数新增的扩展