数据结构实验之二叉树四:(先序中序)还原二叉树
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9 ABDFGHIEC FDHGIBEAC
Example Output
5
-----------------------------------------------------------------------------------------
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct node{ char data; struct node *lchild, *rchild; }*bitTree; bitTree rebuildTree(char *a, char *b, int n){ bitTree root; if(n <= 0){ return NULL; } root = new node; root->data = *a; int i; for(i=0; i<n; i++){ if(b[i] == a[0]){ break; } } root->lchild = rebuildTree(a+1, b, i); root->rchild = rebuildTree(a+i+1, b+i+1, n-i-1); return root; } int deep(bitTree &root){ int count = 0; if(root != NULL){ int len1 = deep(root->lchild); int len2 = deep(root->rchild); count = len1>len2?len1+1:len2+1; } return count; } int main(){ int n; char xianxu[100], zhongxu[100]; while(~scanf("%d", &n)){ bitTree root; scanf("%s", xianxu); scanf("%s", zhongxu); root = rebuildTree(xianxu, zhongxu, n); printf("%d\n", deep(root)); } return 0; }