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

二叉树遍历(牛客网)

描述

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

输入描述:

输入包括1行字符串,长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每

个字符后面都有一个空格。 每个输出结果占一行。

输入:abc##de#g##f###  输出:c b e g d f a

这一题很多人其实连题目都没有读懂到底是什么意思?它是要我们表达什么,或者是要我们干什么。其实它就是说给我们一组字符串,然后要我们把这个字符串先构建成一个二叉树,然后在把这个二叉数用中序遍历来输出结果就可以了。

我们一步一步的来解决这个问题

一.初始化

我们先要有个大局观,先把主函数写了,先把一个主要的思路完成,这个题目我们的思路就是

int main() {char str[100];//创建字符数组scanf("%s",str);int i=0;TNode*root=CreateTree(str,&i);将字符数据变成二叉树Inorder(root);中序遍历return 0;
}

当然我们还需要先初始化一个二叉树

typedef struct TreeNode
{struct TreeNode* left;struct TreeNode* right;char val;
}TNode;

二.创建二叉树

TNode*CreateTree(char*a,int*pi);

首先先把char*a,int*pi传过去,一个是数组名,一个是下标

然后就是第一个判断,如果在字符中出现了#,说明是空,所以我们要下标++,直接返回NULL,这个也为后面的递归做了条件

if(a[*pi]=='#'){(*pi)++;return NULL;}

首先我们要为根节点开辟空间,如果是空,就要报错,如果不是空,我们就把数组的数据存放到这个根节点里面,然后要它向后走,进入递归,先左在右,进入左了之后,原左孩子变成了根节点,就继续走。知道把字符数据都遍历到二叉树中去

TNode*root=( TNode*)malloc(sizeof(TNode));if(root==NULL){printf("mallco fail\n");exit(-1);}root->val=a[*pi];(*pi)++;root->left=CreateTree(a,pi);root->right=CreateTree(a,pi);

整体

TNode*CreateTree(char*a,int*pi)
{if(a[*pi]=='#'){(*pi)++;return NULL;}TNode*root=( TNode*)malloc(sizeof(TNode));if(root==NULL){printf("mallco fail\n");exit(-1);}root->val=a[*pi];(*pi)++;root->left=CreateTree(a,pi);root->right=CreateTree(a,pi);return root;
}

三.中序遍历

void Inorder(TNode*root)
{if(root==NULL)return;Inorder(root->left);printf("%c ",root->val);Inorder(root->right);}

总结

然后就结束了

我认为这个题目难就难在创建二叉树,和题目的意思,只有意思理解了就好做了

http://www.lryc.cn/news/320705.html

相关文章:

  • 语音识别:whisper部署服务器(远程访问,语音实时识别文字)
  • Faust勒索病毒:了解最新变种[nicetomeetyou@onionmail.org].faust,以及如何保护您的数据
  • EI Scopus检索 | 第二届大数据、物联网与云计算国际会议(ICBICC 2024) |
  • 判断闰年(C语言)
  • 2024全国水科技大会【协办单位】凌志环保股份有限公司
  • 以太坊开发学习-solidity(二)值类型
  • 实景剧本杀小程序儿童公园剧本杀小程序系统开发
  • AJAX——综合案例
  • 数字化社会的新纪元:揭秘 Web3 的社交网络
  • 旋转花键的制造工艺
  • python--高阶函数
  • Vue/Uni-app/微信小程序 v-if 设置出场/退出动画(页面交互不死板,看起来更流畅)
  • 加速量子计算机商业化!富士通日立NEC等联合成立新量子计算公司
  • RPC学习笔记一
  • 计算机设计大赛 题目:基于深度学习的中文对话问答机器人
  • LabVIEW飞行器螺旋桨性能测试与数据监控
  • 数字电子技术实验(九)
  • Android 开发环境搭建(Android Studio 安装图文详细教程)
  • 解决方案:使用Vscode运行命令时,.出现 __vsc_prompt_cmd_original: command not found
  • SinoDB数据库运行分析
  • OkHttp
  • uni-app 上传图片无反应 chooseImage失效
  • 学习Java十一天总结
  • 【光伏监控系统的相关产品有哪些】Acrel-1000DP分布式光伏监控系统
  • [Linux]互斥锁(什么是锁,为什么需要锁,怎么使用锁(接口),演示代码)
  • Web基础06-AJAX,Axios,JSON数据
  • Java 文件序列化和反序列化
  • NETLINK_ROUTE 与 NETLINK_SOCK_DIAG 的区别与用法
  • docker yocto vscode
  • 使用ansible剧本进行lvm分盘