您的位置:首页 > 编程语言 > C语言/C++

九度 题目1009:二叉搜索树 (静态数组构建二叉树\二叉树的数组实现)

2015-02-04 11:15 253 查看
题意:

给定序列,将序列中的数字一个一个插入到二叉查找树中。

问不同的序列,最终生成的二叉查找树是否相同。

可以用静态数组构建二叉树。

代码:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Jobdu C++ 九度