pta 建立与遍历二叉树

以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’, 表示该二叉树是空树,否则该字符是相应结点的数据元素。读入相应先序序列,建立二叉链式存储结构的二叉树,然后中序遍历该二叉树并输出结点数据。

输入格式:

字符串形式的先序序列(即结点的数据类型为单个字符)

输出格式:

中序遍历结果

输入样例:

在这里给出一组输入。例如:

ABC##DE#G##F###

输出样例:

在这里给出相应的输出。例如:

CBEGDFA

参考了大佬们的代码,写一下博客方便复习

(有个问题没解决,为啥不能用string类型而用char) 

#include<bits/stdc++.h>
using namespace std;
typedef struct node BinTree;
//创建字符行数组储存先序序列
char str[1000];
//i记录读到哪一个字符了
int i=0;
//建立树的结构
struct node
{
	char data;
	BinTree *Left;
	BinTree *Right;
}*T;//T应该要是指针型的struct node 
//创建树
BinTree *CreatBinTree ()
{
	//读入#时说明该位置为空
    //i++需要写在前面,防止str【i】==‘#’时不能在读入后面的
 	if(str[i++] == '#') return NULL;
 	//建立一个新的节点储存读入的字符
    //new和malloc类似但是前者不需要初始化也不需要先确定所需内存空间大小
	BinTree *T=new BinTree;
	//前面判断是否为‘#’时先使i+1了但是此时data需要的是之前的字符
	T->data=str[i-1];
	//先序是:先-左-右,所有先创建左边的节点
	T->Left=CreatBinTree();
	T->Right=CreatBinTree();
	//读完最后一个字符需要返回T的地址,方便进行中序遍历
	return T;
}
void Inoder(BinTree *T)
{
	if(T!=NULL)
	{
		Inoder(T->Left);
		printf("%c",T->data);
		Inoder(T->Right );
	}
}
int main()
{
	scanf("%s",str);
	T=CreatBinTree();
	Inoder(T);
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值