# include <iostream>
# include <cstdio>
struct Node {
int left;
int right;
};
struct Tree {
int n;
int root;
Node * treeList;
Tree(int _n) :n(_n)
{
treeList = new Node[n+1];
for (int i = 1; i <= n; ++i) treeList[i].left = treeList[i].right = -1;
scanf("%d", &root);
}
void insert( int val)
{
int * point = (val < root) ? &treeList[root].left : &treeList[root].right;
while (*point != -1)
{
point = (val < *point) ? &treeList[*point].left : &treeList[*point].right;
}
*point = val;
}
};
bool isSame(Tree const & t1, Tree const & t2)
{
int i;
for (i = 1; i <= t1.n; ++i)
if ( t1.treeList[i].left != t2.treeList[i].left ||
t1.treeList[i].right != t2.treeList[i].right)
break;
if (i > t1.n) return true;
else return false;
}
int main(void)
{
int n;
scanf("%d", &n);
while (n != 0)
{
int K;
scanf("%d", &K);
Tree t(n);
for (int i = 0; i < n-1; ++i)
{
int tmp;
scanf("%d", &tmp);
t.insert(tmp);
}
while (K--)
{
Tree t2(n);
for (int i = 0; i < n-1; ++i)
{
int tmp;
scanf("%d", &tmp);
t2.insert(tmp);
}
if (isSame(t, t2)) printf("Yes\n");
else printf("No\n");
}
scanf("%d", &n);
}
return 0;
}
04-树4 是否同一棵二叉搜索树(c++)
猜你喜欢
转载自blog.csdn.net/weixin_45339670/article/details/131989374
今日推荐
周排行