大家好,我是小卡皮巴拉
文章目录
目录
牛客题目: 二叉树遍历
题目描述
输入描述:
输出描述:
示例1
解题思路
问题理解
算法选择
具体思路
解题要点
完整代码(C语言)
兄弟们共勉 !!!
每篇前言
博客主页:小卡皮巴拉
咱的口号:🌹小比特,大梦想🌹
作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请大佬们批评斧正。
牛客题目: 二叉树遍历
原题链接:二叉树遍历
题目描述
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
输入描述:
输入包括1行字符串,长度不超过100。
输出描述:
可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。
示例1
输入:
abc##de#g##f###
复制输出:
c b e g d f a
解题思路
问题理解
题目要求从用户输入的一串先序遍历字符串中构建一个二叉树,其中“#”字符代表空节点。构建完成后,需要对这棵二叉树进行中序遍历,并输出遍历结果。
算法选择
使用递归的方法来构建二叉树,并在构建过程中利用指针索引来遍历字符串。然后,使用另一个递归函数对中序遍历进行输出。
具体思路
定义一个二叉树节点的结构体
BinaryTreeNode
。编写一个函数
buyNode
来创建新的二叉树节点。编写一个递归函数
creatTree
,根据先序遍历字符串和当前处理的字符索引来构建二叉树。编写一个递归函数
InOrder
,对构建好的二叉树进行中序遍历,并输出结果。在主函数中,读取输入字符串,调用
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; }
兄弟们共勉 !!!
码字不易,求个三连
抱拳了兄弟们!