POJ 2255 二叉树的重建
来源:互联网 发布:淘宝口红代购ysl 编辑:程序博客网 时间:2024/05/01 11:59
很不错的一道题目,题意是给定二叉树的前序遍历和中序遍历,输出二叉树的后续遍历,总的思想是递归,找到前序遍历中的根节点在中序遍历中的位置,从这个位置将中序遍历分为左子树和右子树,然后递归建树即可。
需要明白二叉树前序,中序,后序遍历之间的关系,有助于帮助像我一样刚开始学习二叉树的朋友更深入的理解二叉树。
题目链接:http://poj.org/problem?id=2255
第一种方法的代码,根据前序和中序直接建树,然后后续遍历输出即可,思路简单,但程序比较复杂,参考了网上大牛的程序,用了指针的指针来传参,写了很久终于结果正确了,但是提交后编译错误,现在也没有找到错误在哪,指针果然还是不好理解,要加强对指针的理解了。如果有哪位大神知道小弟哪里错了,请指出来,感激不尽。
#include<stdio.h>#include<stdlib.h>#include<string.h>struct node {char date;node *lchild,*rchild;};int t,f;void build(char *a,char *b,node **p){int i,k;(*p)=(struct node*)malloc(sizeof(node));(*p)->lchild=NULL;(*p)->rchild=NULL;k=strlen(b);(*p)->date=*a;if(k==1)return ;for(i=0;i<k;i++){if(*(b+i)==*a)break;}if(i==0){build(a+1,b+1,&(*p)->rchild);}else if(i==k-1){*(b+i)='\0';build(a+1,b,&(*p)->lchild);}else{*(b+i)='\0';build(a+1,b,&(*p)->lchild);build(a+i+1,b+i+1,&(*p)->rchild);}}void last(node *s){if(s!=NULL){last(s->lchild);last(s->rchild);printf("%c",s->date);}}int main(){char a[100],b[100];node *root;while(scanf("%s%s",a,b)!=-1){f=0;root=NULL;build(a,b,&root);last(root);printf("\n");}return 0;}
这个是AC的代码,程序比上一个简单多了,但是需要很好的理解三种遍历的关系.
#include<stdio.h>#include<string.h>char s[100];void build(int n,char *a,char *b,char *s){int i,j,k,m;if(n<=0)return ;k=strlen(b);for(i=0;i<k;i++) //找到根节点在中序中位置{if(*(b+i)==*a)break;}*(b+i)='\0';build(i,a+1,b,s); //分为左右子树,递归build(n-i-1,a+i+1,b+i+1,s+i);s[n-1]=*a; //核心思想,根节点的位置是后续遍历的最后}int main(){int n;char a[100],b[100];memset(s,0,sizeof(s));while(scanf("%s%s",a,b)!=-1){n=strlen(a);build(n,a,b,s);s[n]='\0';printf("%s\n",s);}return 0;}
0 0
- POJ 2255 经典的重建二叉树
- POJ 2255 二叉树的重建
- poj 2255:重建二叉树
- POJ 2255 Tree Recovery(二叉树重建)
- POJ 2255 根据二叉树的前序和中序序列来重建二叉树
- 二叉树的重建
- 二叉树的重建!!!
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建
- 二叉树的重建
- 2255:重建二叉树
- 算法:二叉树的重建
- 重建二叉树的思路
- 重建二叉树以及树的遍历
- Perl split函数用法指南 / /同' '
- openstack核心路由和扩展路由及路由对应的api函数调用流程分析
- HTML5 Audio/Video 标签,属性,方法,事件汇总
- 函数对象-摘自《C++沉思录》Andrew Koenig
- 网口芯片SMI接口实现
- POJ 2255 二叉树的重建
- 埃迪·加马拉 - 文学经理
- iOS 导航栏的一些使用属性记录(备忘)
- PHP Linux定时任务设置
- 地热发电101
- 经纬财富:辽源市场的变化,需要技术的支持
- 计算机网络(四)
- sprintf函数的用法
- Zend Studio 11 0711 更新破解 11.0.0.v20140715-20140711-1248-184