您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验之二叉树四:还原二叉树

2016-08-09 17:02 239 查看
数据结构实验之二叉树四:还原二叉树

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;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: