3树-3前中序变后序

#include<bits/stdc++.h>
using namespace std;
void printTree(char *pre,char *in,int length){//传入两串本轮起址及长度
	if(length<1)return;             //全部字母已经输出完成
	int idx=0;                      //中序遍历偏移值初始化为无偏移,注意每次传进来的in与pre起点是不同的
	while(in[idx]!=pre[0])idx++;    //前序pre[0]就是当前子树的树根,对应中序idx此结点的位置,idx左边是左树,右边是右树
	printTree(pre+1,in,idx);        //递归传入前序下一值,原中序,偏移值亦即区间长,输出左儿
	printTree(pre+idx+1,in+idx+1,length-idx-1);//递归传入前中序偏移IDX+1后的值,长度相应减小,输出右儿子
	printf("%c",pre[0]);            //因为是后序输出,所以最后再输出当前子树根
}
int main(){
	char Pre[1000],In[10000];   //定义前中缀表达式
	gets(Pre);gets(In);         //输入前中缀表达式
	int len=strlen(Pre);        //得到前缀表达式长度
	printTree(Pre,In,len);      //传入两串起址及长度求解后缀表达式
	return 0;
}
/*
前序遍历:GDAFEMHZ
中序遍历:ADEFGHMZ
后序遍历:AEFDHZMG
以前中为例分析:前序开头是G,则G是树根,在中序遍历中,G左边的ADEF是G左子树,HMZ是G右子树
前序中第二个是D,则由中序区间ADEF可知,A是D左子树,EF是D右子树
前序中第三个是A,由中序知没有儿子
前度中第四个是F,由中序知E是其左儿子,没有右儿
前序中第五个是E,由中序知没有儿子
前序中第六个是M,由中序知左儿是H,右儿是Z
前序中第七个是H,由中序知没有左右儿
前序中第八个是Z,由中序知没有左右儿

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值