#include<iostream>
using namespace std;
class Node {
public:
char ch;
Node*left;
Node *right;
Node(char c, Node *lc, Node *rc) {
ch = c;
left = lc;
right = rc;
}
Node() {
}
~Node() {
delete left;
delete right;
}
};
//create a tree refer to the inorder and postorder
Node*create(char *inorder, char *postorder, int length) {
if (length == 0) {
return NULL;
} else {
Node *node = new Node;
node->ch = postorder[length - 1];
int rootIndex = 0;
for (; rootIndex < length; rootIndex++) {
if (inorder[rootIndex] == postorder[length - 1]) {
break;
}
}
node->left = create(inorder, postorder, rootIndex);
node->right = create(rootIndex + inorder + 1, postorder + rootIndex,
length - rootIndex - 1);
return node;
}
}
//return the height of a binary tree
int getHeight(Node *root) {
if (root == NULL) {
return 0;
} else
return 1 + max(getHeight(root->left), getHeight(root->right));
}
int main() {
char inorder[27];
char postorder[27];
int count;
Node *root;
int length;
cin >> count;
while (count > 0) {
cin >> inorder;
cin >> postorder;
length = strlen(postorder);
cout << "Start creating..." << endl;
cout << "The height of the tree is : "
<< getHeight(create(inorder, postorder, length)) << endl;
count--;
}
}