分别对原有序列和需要检查的序列建立一棵二叉搜索树,然后分别进行前序遍历得到字符串结果,如果字符串结果相同,输出“Yes”,否则“No”。
#include <iostream>
using namespace std;
const int N = 20;
typedef struct TreeNode *Tree;
struct TreeNode
{
int data;
Tree left, right;
};
int n, l;
Tree insert(Tree T, int x)
{
if (!T)
{
T = (Tree)malloc(sizeof(struct TreeNode));
T->data = x;
T->left = T->right = NULL;
}
else
{
if (x < T->data) T->left = insert(T->left, x);
else if (x > T->data) T->right = insert(T->right, x);
}
return T;
}
Tree buildTree(int n)
{
int x;
Tree T = NULL;
for (int i = 0; i < n; i ++)
{
cin >> x;
T = insert(T, x);
}
return T;
}
void preTravel(Tree T, string &s)
{
if (T)
{
s += T->data + '0';
preTravel(T->left, s);
preTravel(T->right, s);
}
}
int main()
{
while (cin >> n, n)
{
cin >> l;
Tree T1 = buildTree(n);
string s1 = "";
preTravel(T1, s1);
for (int i = 0; i < l; i ++)
{
Tree T2 = buildTree(n);
string s2 = "";
preTravel(T2, s2);
if (s1 == s2) puts("Yes");
else puts("No");
}
}
return 0