数据结构实验之二叉树八:(中序后序)求二叉树的深度
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 <stdlib.h> #include <string.h> struct node { char data; struct node *lchild, *rchild; }; struct node *creat(char a[], char b[], int i, int j, int s, int t)//用中序后序建立二叉树,ij表示后序的坐标,st表示中序; { int k; struct node *root; if(i > j) { return NULL; } root = (struct node *)malloc(sizeof(struct node)); root -> data = a[j]; k = s; while((k <= t) && b[k] != a[j]) { k++; } if(k > t) { exit(0); } root -> lchild = creat(a, b, i, i+k-s-1, s, k-1); root -> rchild = creat(a, b, i+k-s, j-1, k+1, t); return root;
}; int deep(struct node *root) { int i, j; if(root == NULL) { return 0; } else { i = deep(root -> lchild); j = deep(root -> rchild); if(i > j) { return i+1; } else { return j+1; } } } int main() { int n, t, h; char a[100], b[100]; scanf("%d", &t); while(t--) { scanf("%s %s", b, a); n = strlen(a); struct node *root; root = creat(a, b, 0, n-1, 0, n-1); h = deep(root); printf("%d\n", h); } return 0; }