#include<stdio.h>
#include<stdlib.h>
typedef struct bst
{
int data;
struct bst* left;
struct bst* right;
int flag;
}bst;
bst* establish();
bst* insert(bst* p);
void check(bst* p);
int find(bst*p);
int main()
{
bst* p = establish();
check(p);
}
int find(bst* p, int x)
{
if (p->flag)
{
if (x > p->data) return find(p->right, x);
else if (x < p->data) return find(p->left, x);
else return 0; //返回为0代表不同
}
else
{
if (x == p->data)
{
p->flag = 1;
return 1;
}
else return 0;
}
}
bst* insert(bst* p,int node)
{
if (!p)
{
p = (bst*)malloc(sizeof(bst));
p->data = node;
p->right = p->left = NULL;
p->flag = 0;
}
else
{
if (node > p->data)
{
p->right = insert(p->right, node);
}
if (node<p->data)
{
p->left = insert(p->left, node);
}
}
return p;
}
bst* establish()
{
printf("请输入你的树有几个结点\n");
int n;
scanf("%d", &n);
printf("请按顺序输入结点\n");
bst* p = NULL;
int node;
for ( int i = 0; i < n; i++)
{
scanf("%d", &node);
p = insert(p, node);
}
printf("树已建立\n");
return p;
}
void check(bst* p)
{
int num = 0;
printf("请输入被检查的树有几个结点\n");
int n;
scanf("%d", &n);
printf("请按顺序输入结点\n");
int node;
for (int i = 0; i < n; i++)
{
scanf("%d", &node);
if (find(p, node)==0)
{
num = 1;
}
}
if (num==1)
{
printf("两树不同\n");
}
else
{
printf("两树相同\n");
}
}