Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Example Input
2 dbgeafc dgebfca lnixu linux
Example Output
43
#include<stdio.h> #include<string.h> #include<stdlib.h> #define ERROR -1 #define OK 1 typedef char TElemtype; typedef int Statu; typedef struct BiTnode { TElemtype data; struct BiTnode *lchild, *rchild; }BiTnode, *BiTree; int Prin(BiTree T); BiTree CreateBiTree(TElemtype inorder[], TElemtype post[], int len); int main() { char inorder[55], post[55]; int n, l; scanf("%d", &n); while(n--) { scanf("%s%s", inorder, post); BiTree T; l = strlen(inorder); T = CreateBiTree(inorder, post, l); l = Prin(T); printf("%d\n", l); } return 0; } int Prin(BiTree T) { int d, l, r; if(!T) d = 0; else { l = Prin(T -> lchild); r = Prin(T -> rchild); d = 1 + (l > r ? l : r); } return d; } BiTree CreateBiTree(TElemtype inorder[], TElemtype post[], int len) { int i; if(!len) { return NULL; } BiTree T; for(i = 0; i < len; i++) { if(post[len - 1] == inorder[i]) break; } T = (BiTree)malloc(sizeof(BiTnode)); T -> data = post[len - 1]; T -> lchild = CreateBiTree(inorder, post, i); T -> rchild = CreateBiTree(inorder + 1 + i, post + i, len - i - 1); return T; }