03-树3 Tree Traversals Again (scanf的思考与递归不熟练)

该博客主要介绍了如何通过先序和中序遍历序列构造二叉树。首先,理解Push的序列对应先序遍历,Pop的序列对应中序遍历。然后,通过读取输入的先序和中序序列,使用栈来辅助构建二叉树。最后,递归实现后序遍历输出重建的二叉树。
摘要由CSDN通过智能技术生成

做这题时要先练过二叉树的非递归遍历,才会明白Push的序列是先序遍历序列,Pop的序列是中序遍历序列。

#include <stdio.h>
#include <stdlib.h>
typedef int Tree;
struct TNode{
	int Data;
	Tree Left;
	Tree Right;
}T[30];
int *PreorderQ,P=-1;
int *InorderQ,I=-1;
int N,check=0;
void GetPreQandInQ()
{
	scanf("%d",&N);
	PreorderQ=(int*)malloc(sizeof(int)*N);
	InorderQ=(int*)malloc(sizeof(int)*N);
	
	char Operation[5],cData;
	int Stack[N],Top=-1;
	for(int i=0;i<2*N;i++)
	{
		scanf("%s",Operation);//两个连着的scanf,即使中间还有其他语句,也可以连着一起输入 
		if(Operation[1]=='u'){
			scanf("%d",&PreorderQ[++P]);//空格虽然能结束字符串、整型的输入,但后面可以一直输入不会存储的符号 
			Stack[++Top]=PreorderQ[P];
		}
		else InorderQ[++I]=Stack[Top--];
	}
}
void Postorder(int N,int *PreorderQ,int *InorderQ)//递归我还是用得不熟练 
{
	if(N==0) return;
	int root=PreorderQ[0],i;
	for(i=0;i<N;i++)
		if(InorderQ[i]==root)
			break;
	Postorder(i,PreorderQ+1,InorderQ) ;
	Postorder(N-i-1,PreorderQ+i+1,InorderQ+i+1);
	if(check==0){
		printf("%d",root);
		check=1;		
	} 
	else printf(" %d",root);
}
int main()
{
	GetPreQandInQ();
	Postorder(N,PreorderQ,InorderQ);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值