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

【牛客刷题实战】二叉树遍历

大家好,我是小卡皮巴拉

文章目录

目录

牛客题目: 二叉树遍历

题目描述

输入描述:

输出描述:

示例1

解题思路

问题理解

算法选择

具体思路

解题要点

完整代码(C语言)

兄弟们共勉 !!! 


每篇前言

博客主页:小卡皮巴拉

咱的口号:🌹小比特,大梦想🌹

作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请大佬们批评斧正。

牛客题目: 二叉树遍历

原题链接:二叉树遍历

题目描述

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

输入描述:

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

输出描述:

可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。

示例1

输入:

abc##de#g##f###

复制输出:

c b e g d f a 

解题思路

问题理解

题目要求从用户输入的一串先序遍历字符串中构建一个二叉树,其中“#”字符代表空节点。构建完成后,需要对这棵二叉树进行中序遍历,并输出遍历结果。

算法选择

使用递归的方法来构建二叉树,并在构建过程中利用指针索引来遍历字符串。然后,使用另一个递归函数对中序遍历进行输出。

具体思路

  1. 定义一个二叉树节点的结构体 BinaryTreeNode

  2. 编写一个函数 buyNode 来创建新的二叉树节点。

  3. 编写一个递归函数 creatTree,根据先序遍历字符串和当前处理的字符索引来构建二叉树。

  4. 编写一个递归函数 InOrder,对构建好的二叉树进行中序遍历,并输出结果。

  5. 在主函数中,读取输入字符串,调用 creatTree 函数构建二叉树,然后调用 InOrder 函数输出结果。

解题要点

  • 定义二叉树节点:使用结构体 BinaryTreeNode 定义二叉树节点。

  • 创建节点:使用 buyNode 函数根据字符创建新节点。

  • 构建二叉树:使用 creatTree 函数递归地根据先序遍历字符串和索引构建二叉树。

  • 中序遍历:使用 InOrder 函数递归地对二叉树进行中序遍历,并输出遍历结果。

  • 处理输入:在主函数中读取输入字符串,并调用相关函数进行构建和遍历。

完整代码(C语言)

#include <stdio.h>
#include <stdlib.h>typedef struct BinaryTreeNode
{char data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;BTNode* buyNode(char ch)
{BTNode* node = (BTNode*)malloc(sizeof(BTNode));node->data = ch;node->left = node->right = NULL;return node;
}
BTNode* creatTree(char* arr,int* pi)
{if(arr[*pi] == '#'){++(*pi);return NULL;}BTNode* root = buyNode(arr[*pi]);++(*pi);root->left = creatTree(arr, pi);root->right = creatTree(arr, pi);return root;
}
void InOrder(BTNode* root)
{if(root == NULL){return;}InOrder(root->left);printf("%c ",root->data);InOrder(root->right);
}
int main() {char arr[100];scanf("%s",arr);//根据数组中的内容创建二叉树int i = 0;BTNode* root = creatTree(arr,&i);InOrder(root);return 0;
}

兄弟们共勉 !!! 

码字不易,求个三连

抱拳了兄弟们!

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

相关文章:

  • 消息队列mq有哪些缺点?
  • 【CENet】多模态情感分析的跨模态增强网络
  • 动态代理:面向接口编程,屏蔽RPC处理过程
  • HTTP 405 Method Not Allowed:解析与解决
  • 推荐一款CAD/CAM设计辅助工具:Mastercam
  • 位运算刷题记录
  • 爬虫技术——小白入狱案例
  • vue 果蔬识别系统百度AI识别vue+springboot java开发、elementui+ echarts+ vant开发
  • 全新更新!Fastreport.NET 2025.1版本发布,提升报告开发体验
  • 信息学科平台系统设计与实现:Spring Boot技术手册
  • conda下jupyterlab安装问题以及交互绘图问题记录
  • 尚硅谷react教程_扩展_setState更新状态的2种写法
  • C语言编写的自动取款机模拟程序
  • 【常用数据结构】开发中常用的数据结构?
  • OCC 点云
  • 方法重写与方法重载
  • Vue3实现地球上加载柱体
  • OpenGL入门003——使用Factory设计模式简化渲染流程
  • 01_AI编程案例展示:借助AI轻松爬取海量网盘链接
  • 【机器学习导引】ch5-神经网络
  • 【Axure原型分享】颜色选择器——填充颜色
  • 怎么安装行星减速电机才是正确的
  • Unity程序化生成地形
  • Vxe UI vue vxe-table 表格中使用下拉表格,单元格渲染下拉表格
  • Android开发教程实加载中...动效
  • NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控系统建设方案
  • 适配器模式适用的场景
  • Ambari里面添加hive组件
  • Windows部署rabbitmq
  • 【Flask】四、flask连接并操作数据库