数据结构实验之二叉树四:(先序中序)还原二叉树
数据结构实验之二叉树四:(先序中序)还原二叉树
Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Sample
Input
9 ABDFGHIEC FDHGIBEAC
Output
5
#include<iostream> #include<cstring> using namespace std; struct Tnode { char d; Tnode *l,*r; }; Tnode *CreatTree(char pre[],char in[],int len) { if(len<=0) return NULL; int i; for( i=0;i<len;i++) if(*pre==in[i]) break; Tnode *p=new Tnode; p->d=*pre; p->l=CreatTree(pre+1,in,i); p->r=CreatTree(pre+i+1,in+i+1,len-i-1); return p; } int DeepT(Tnode *p) { if(!p) return 0; else { int l=DeepT(p->l)+1; int r=DeepT(p->r)+1; return l>r?l:r; } } int main() { int n; while(cin>>n) { char st1[60],st2[60]; cin>>st1>>st2; Tnode *root; root=CreatTree(st1,st2,n); cout<<DeepT(root)<<endl; } return 0; }
#include <iostream> #include <cstdio> using namespace std; struct Tree { char c; Tree *lt,*rt; }; Tree *creat(char *&xx,char *zx) { if(*zx=='\0') return NULL; char *x,*y; Tree *r=new Tree; int i=0; while(zx[i]!='\0') { if(*xx==zx[i]) { r->c=zx[i]; zx[i]='\0'; x=zx; y=zx+i+1; xx++; r->lt=creat(xx,x); r->rt=creat(xx,y); break; } i++; } return r; } int dev(Tree *r) { if(r==NULL) return 0; int l=dev(r->lt),rr=dev(r->rt); int m=l>rr?l:rr; return m+1; } int main() { char xx[55],zx[55],*p; Tree *root; int n; while(scanf("%d",&n)!=EOF) { scanf("%s%s",xx,zx); p=xx; root=creat(p,zx); printf("%d\n",dev(root)); } return 0; }
posted on 2020-04-17 09:42 llllIYIlIN 阅读(379) 评论(0) 编辑 收藏 举报