题意:
给定序列,将序列中的数字一个一个插入到二叉查找树中。
问不同的序列,最终生成的二叉查找树是否相同。
可以用静态数组构建二叉树。
代码:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int n;
string s;
int a[1024];
int b[1024];
void create_tree(const string& s, int a[])
{
for (size_t i = 0; i < s.size(); ++ i)
{
// 'j' should be start by 1,
// or it might cause infinity loop when 'j=2*j' excuted
for (int j = 1; j < 1024; )
{
if (a[j] == -1)
{
a[j] = s[i];
break;
} else if (a[j] > s[i])
{
j = 2 * j;
} else
{
j = 2 * j + 1;
}
}
}
}
int main()
{
while (cin >> n, n)
{
memset(a, -1, sizeof(a));
cin >> s;
create_tree(s, a);
for (int i = 0; i < n; ++ i)
{
memset(b, -1, sizeof(b));
cin >> s;
create_tree(s, b);
int j = 0;
for (; j<1024 && a[j]==b[j]; ++ j) {}
cout << (j==1024? "YES": "NO") << endl;
}
}
return 0;
}