5-23 还原二叉树 (25分)

来源:互联网 发布:西装牌子 知乎 编辑:程序博客网 时间:2024/06/07 01:09
5-23 还原二叉树   (25分)

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。

输入格式:

输入首先给出正整数N(\le50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。

输出格式:

输出为一个整数,即该二叉树的高度。

输入样例:

9ABDFGHIECFDHGIBEAC

输出样例:

5


很简单,但不知为何在dev上闪退。

#include<iostream>#include<string>#include<cstring>#include<cstdlib>using namespace std;typedef struct treenode* Tree;struct treenode{char data;Tree lchild,rchild;};Tree Create(string pre,string in,int num){Tree T=(Tree)malloc(sizeof(struct treenode));T->data=pre[0];int t=in.find(pre[0]);if(t>0){T->lchild=Create(pre.substr(1,t),in.substr(0,t),t);}if(num-t>1){T->rchild=Create(pre.substr(t+1),in.substr(t+1),num-t-1);}return T;}int getheight(Tree L){if(L==NULL){return 0;}int LH=getheight(L->lchild);int RH=getheight(L->rchild);return LH>RH?LH+1:RH+1;}int main(){int n;cin>>n;string pre,in;cin>>pre>>in;int num=pre.length();Tree L=Create(pre,in,num);int height=getheight(L);cout<<height<<endl;return 0;}


原创粉丝点击