基于二叉链表的树结构相等的判断
描述
设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,按此方法创建两棵二叉树,然后编写递归算法判断这两棵树是否相等。
输入
多组数据,每组数据有两行。每行为一个二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。
输出
每组数据输出一行。若两个二叉树相等输出“YES”,否则输出“NO”。
样例输入1
abcd00e00f00ig00h00 abcd00e00f00ig00h00 abd00e00cf00g00 abd00e00cf00h00 0
样例输出1
YES NO
解答:根据输入字符串建立两条二叉链表。同时先序遍历两棵二叉树,比较对应结点是否相同。
#include<stdio.h>
#include<stdlib.h>
int k,flag;
typedef struct node
{
char data;
struct node *left,*right;
} Node,*BiTree;
void Create(BiTree &T,char *s)
{
k++;
if(s[k]=='0')
T=NULL;
else
{
T=(Node *)malloc(sizeof(Node));
T->data = s[k];
Create(T->left,s);
Create(T->right,s);
}
}
void Compare(BiTree t1,BiTree t2)
{
if(t1 && t2)
{
if(t1->data == t2->data)
{
Compare(t1->left,t2->left);
Compare(t1->right,t2->right);
}
else
{
flag=0;
}
}
else if(t1||t2)
{
flag=0;
}
}
int main()
{
BiTree t1,t2;
char s1[100],s2[100];
while(1)
{
scanf("%s",s1);
if(s1[0]=='0' && s1[1]=='\0')
break;
scanf("%s",s2);
k=-1;
Create(t1,s1);
k=-1;
Create(t2,s2);
flag=1;
Compare(t1,t2);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}