字符串转二叉树
创始人
2024-03-30 11:20:20
0

一. 题目介绍

在这里插入图片描述

二. 题目分析

首先

题目让我们以先序遍历的方式用字符串建立一个二叉树

输入是一个字符串

输出是是以中序遍历二叉树打印

我们先来看最简单的输入

这里只要建立一个字符数组 然后等测试用例输入就好了

    // 接受输入值char arr[100]={0};scanf("%s",arr);

代码表示如上

之后我们再开始创建二叉树

在这里插入图片描述
我们可以看到 它是先序遍历

所以说我们要用先序遍历的方式来创建二叉树

我们先来创建二叉树的结构体

代码表示如下

typedef struct BinaryTree
{struct BinaryTree* left;struct BinaryTree* right;char val;
}BT;

之后我们开始写创建二叉树的代码(前序)

BT* BinaryTreeCreate(char* arr , int i)
{//如果是#返回空if(arr[i]=='#'){i++;return NULL;}// 否则就创建一个新的节点 BT* newnode = (BT*)malloc(sizeof(struct BinaryTree));newnode->val= arr[i];i++;newnode->left = BinaryTreeCreate(arr, i);newnode->right = BinaryTreeCreate(arr, i); return newnode;}

但是我们这样子的代码对吗?

显然是不对的

因为这个时候我们使用的i是传值传递的

所以说这里一定会存在问题

我们这个时候需要使用指针来接受i的值

BT* BinaryTreeCreate(char* arr , int* pi)
{//如果是#返回空if(arr[*pi]=='#'){(*pi)++;return NULL;}// 否则就创建一个新的节点 BT* newnode = (BT*)malloc(sizeof(struct BinaryTree));newnode->val= arr[*pi];(*pi)++;newnode->left = BinaryTreeCreate(arr, pi);newnode->right = BinaryTreeCreate(arr, pi); return newnode;
}

这样子就可以了

之后我们开始中序遍历打印

void Inorder(BT* root)
{// 首先考虑极限情况if(root==NULL){return;}// 之后开始中序遍历 Inorder(root->left);printf("%c ",root->val);Inorder(root->right);
}

三. 所有代码

#include 
#include typedef struct BinaryTree
{struct BinaryTree* left;struct BinaryTree* right;char val;
}BT;void Inorder(BT* root)
{// 首先考虑极限情况if(root==NULL){return;}// 之后开始中序遍历 Inorder(root->left);printf("%c ",root->val);Inorder(root->right);
}BT* BinaryTreeCreate(char* arr , int* pi)
{//如果是#返回空if(arr[*pi]=='#'){(*pi)++;return NULL;}// 否则就创建一个新的节点 BT* newnode = (BT*)malloc(sizeof(struct BinaryTree));newnode->val= arr[(*pi)++];newnode->left = BinaryTreeCreate(arr, pi);newnode->right = BinaryTreeCreate(arr, pi); return newnode;
}int main()
{// 接受输入值char arr[100]={0};scanf("%s",arr);// 建立二叉树int i = 0;BT* root = BinaryTreeCreate(arr, &i); // 中序遍历打印二叉树Inorder(root);return 0;
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...