博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
已知后序遍历和中序遍历求二叉树
阅读量:4046 次
发布时间:2019-05-25

本文共 1493 字,大约阅读时间需要 4 分钟。

描述

输入某二叉树的后序遍历和中序遍历的结果,请输出前序遍历序列。假设输入的后序遍历和中序遍历的结果中都不含重复的数字。例如输入后序遍历序列{7,1,4,2,5,8,6,3,1}和中序遍历序列{4,7,2,1,5,3,8,6},重建二叉树并返回后序遍历序列

输入

输入某二叉树的后序遍历和中序遍历的结果

输出

输出前序遍历序列

输入样例 1 

7 4 2 5 8 6 3 1

4 7 2 1 5 3 8 6

输出样例 1

1 2 4 7 3 5 6 8

参考题目详解: 

实现代码:

#include
#include
#include
typedef struct node* BinTree; struct node{ int date; BinTree left; BinTree right;};BinTree Build(int post[] ,int in[],int size){ if(size<=0)return NULL; //先在中序中找到根节点 int i=0; for(i=0;i
date=post[size-1]; tree->left=Build(post,in,i); tree->right=Build(post+i,in+i+1,size-1-i); return tree;} void preorder(BinTree T) //前序遍历{ if(T==NULL)return; else{ printf("%d ",T->date); preorder(T->left); preorder(T->right); } } int main(){ char postt[800],inn[800]; gets(postt); gets(inn); int size=strlen(postt); int post[800],in[800]; int postcount=0; int i; for(i=0;i
='0'&&postt[i]<='9') { //此if-else 用来转换多位数为int类型 if(postt[i-1]==' ') //如果前一个元素为空格 { postcount++; post[postcount]=postt[i]-'0'; } else //如果前一个元素不是空格,那么说明与前一个元素一同构成的数 例如:10 { post[postcount]=post[postcount]*10+(postt[i]-'0'); } } } } int incount=0; for(i=0;i
='0'&&inn[i]<='9') { if(inn[i-1]==' ') { incount++; in[incount]=inn[i]-'0'; } else { in[incount]=in[incount]*10+(inn[i]-'0'); } } } } //如果后序遍历的结点数与中序遍历的结点数相同且不为0,那么可以找到对应二叉树 if(postcount==incount&&postcount!=0) { BinTree T; T=Build(post,in,postcount+1); preorder(T); } return 0;}

 

转载地址:http://iszci.baihongyu.com/

你可能感兴趣的文章
<转>文档视图指针互获
查看>>
从mysql中 导出/导入表及数据
查看>>
HQL语句大全(转)
查看>>
几个常用的Javascript字符串处理函数 spilt(),join(),substring()和indexof()
查看>>
javascript传参字符串 与引号的嵌套调用
查看>>
swiper插件的的使用
查看>>
layui插件的使用
查看>>
JS牛客网编译环境的使用
查看>>
9、VUE面经
查看>>
关于进制转换的具体实现代码
查看>>
Golang 数据可视化利器 go-echarts ,实际使用
查看>>
mysql 跨机器查询,使用dblink
查看>>
mysql5.6.34 升级到mysql5.7.32
查看>>
dba 常用查询
查看>>
Oracle 异机恢复
查看>>
Oracle 12C DG 搭建(RAC-RAC/RAC-单机)
查看>>
Truncate 表之恢复
查看>>
Oracle DG failover 后恢复
查看>>
mysql 主从同步配置
查看>>
为什么很多程序员都选择跳槽?
查看>>