数据结构实验之二叉树八:(中序后序)求二叉树的深度
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Example Input
2 dbgeafc dgebfca lnixu linux
Example Output
4 3
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct node{ char data; struct node *lchild, *rchild; }*bitTree; int cnt = 0; char str[100]; /*void rebuild(bitTree &root, char xianxu[], char zhongxu[]){ if(*zhongxu == '\0') root = NULL; char *x, *y; int i = 0; while(zhongxu[i] != '\0'){ if(*xianxu == zhongxu[i]){ root->data = zhongxu[i]; zhongxu[i] = '\0'; x = zhongxu; y = zhongxu+i+1; xianxu++; rebuild(root->lchild, xianxu, x); rebuild(root->rchild, xianxu, y); break; } i++; } }*/ bitTree rebuild(char *a, char *b, int n){ bitTree root; int i; if(n <= 0) return NULL; root = new node; root->data = b[n-1]; //根节点的数据 i = strchr(a, b[n-1]) - a; //查找字符串s中首次出现字符c的位置 root->lchild = rebuild(a, b, i); root->rchild = rebuild(a+1+i, b+i, n-i-1); return root; } int depth(bitTree root) { int d1, d2; if (root != NULL) { d1 = depth(root->lchild); d2 = depth(root->rchild); if (d1 > d2) return d1 + 1; else return d2 + 1; } return 0; } int main(){ char xianxu[55], zhongxu[55]; bitTree root; int m; scanf("%d", &m); while(m--){ scanf("%s", xianxu); scanf("%s", zhongxu); int len = strlen(xianxu); cnt = 0; root = rebuild(xianxu, zhongxu, len); printf("%d\n", depth(root)); } return 0; }