04-树4 是否同一棵二叉搜索树(c++)

# 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;
}

猜你喜欢

转载自blog.csdn.net/weixin_45339670/article/details/131989374