数据结构实验之二叉树四:还原二叉树
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入
输入数据有多组,每组数据第一行输入
1
个正整数
N(1 <= N <= 50)
为树中结点总数,随后
2
行先后给出先序和中序遍历序列,均是长度为
N
的不包含重复英文字母
(
区分大小写
)
的字符串。
输出
输出一个整数,即该二叉树的高度。
示例输入
9 ABDFGHIEC FDHGIBEAC
示例输出
5
此题和树的深度,还有求后续遍历和层次遍历的题差不多
#include<stdio.h> #include<iostream> #include<stdlib.h> #include<algorithm> #include<string.h> #include<queue> using namespace std; struct node { char data; struct node *left; struct node *right; }; struct node* create(char *s1,char *s2,int n) { struct node *root; root=new node; if(n==0) return NULL; root->data=s1[0]; int m=strchr(s2,s1[0])-s2;//函数strchr(string s,char c);表示查找字符c在字符串 s 中的位置,并返回这个位置 //求左子树的结点的个数 root->left=create(s1+1,s2,m); //递归求得左右子树 root->right=create(s1+m+1,s2+m+1,n-m-1); return root; } int high(struct node *root) { if(!root) return 0; else if(!root->left&&!root->right) return 1; else return max(high(root->left),high(root->right))+1; } int main() { char s1[1000],s2[1000]; int n; struct node*root; root=new node; while( cin>>n) { cin>>s1; cin>>s2; root=create(s1,s2,n); cout<<high(root)<<endl; } return 0; }