#include <stdio.h>
#define Error printf
struct TreeNode;
typedef struct TreeNode* Tree;
typedef int ElementType;
void ResetTreeFlag(Tree T);
void FreeTree(Tree T);
Tree BuildTree(int N);
Tree Insert(Tree T, ElementType element);
void Print(Tree T);
int Check(Tree T, ElementType element);
int Judge(Tree T, int N);
struct TreeNode
{
ElementType Element;
Tree Left, Right;
int flag;
};
Tree BuildTree(int N)
{
int i;
ElementType element;
Tree T;
T = (Tree)malloc(sizeof(struct TreeNode));
if (!T)
{
Error("Out of space!");
return NULL;
}
printf("请输入序列:");
scanf_s("%d", &T->Element); //Element的类型为ElementType
T->Left = T->Right = NULL;
for (i = 1; i < N; i++)
{
scanf_s("%d", &element); //element的类型为ElementType
T = Insert(T, element);
}
return T;
}
Tree Insert(Tree T, ElementType element)
{
if (!T)
{
T = (Tree)malloc(sizeof(struct TreeNode));
if (!T)
{
Error("Out of space!");
return NULL;
}
else
{
T->Element = element;
T->Left = T->Right = NULL;
}
}
else if (element < T->Element)
T->Left = Insert(T->Left, element);
else if (element > T->Element)
T->Right = Insert(T->Right, element);
return T;
}
void Print(Tree T)
{
if (T)
{
printf("%d ", T->Element);
Print(T->Left);
Print(T->Right);
}
}
int Check(Tree T, ElementType element)
{
if (T->flag)
{
if (element < T->Element)
return Check(T->Left, element);
else if (element > T->Element)
return Check(T->Right, element);
else
return 0;
}
else
{
if (element == T->Element)
{
T->flag = 1;
return 1;
}
else
return 0;
}
}
int Judge(Tree T, int N)
{
int i, flag = 0;
ElementType element; //element的类型为ElementType
printf("请输入序列:");
for (i = 0; i < N; i++)
{
scanf_s("%d", &element);
if (!flag && Check(T, element))
flag = 1;
}
if (flag)
return 0;
else
return 1;
}
void ResetTreeFlag(Tree T)
{
if (T)
{
if(T->Left)
ResetTreeFlag(T->Left);
if(T->Right)
ResetTreeFlag(T->Right);
T->flag = 0;
}
}
void FreeTree(Tree T)
{
if (T)
{
if (T->Left)
FreeTree(T->Left);
if (T->Right)
FreeTree(T->Right);
free(T);
}
}
int main()
{
Tree T;
int i, N, num;
printf("请输入要比较序列的序列所含的元素个数:");
scanf_s("%d", &N);
while (N)
{
printf("请输入要比较序列的数目:");
scanf_s("%d", &num);
T = BuildTree(N);
for (i = 0; i < num; i++)
{
if (Judge(T, N))
printf("yes\n");
else
printf("no\n");
ResetTreeFlag(T);
}
FreeTree(T);
printf("请输入要比较序列的序列所含的元素个数:");
scanf_s("%d", N);
}
return 0;
}
判断输入的序列是否为同一棵二叉树
最新推荐文章于 2022-06-05 21:07:06 发布