描述
设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,按此方法创建两棵二叉树,然后编写递归算法判断这两棵树是否相等。
输入
多组数据,每组数据有两行。每行为一个二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。
输出
每组数据输出一行。若两个二叉树相等输出“YES”,否则输出“NO”。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
//定义节点
typedef struct Treenode {
char data;
struct Treenode *lchild;
struct Treenode *rchild;
}Treenode, *Tree;
//先序建树**
void Creatree(Tree &T, char e[], int &i) {
if (e[i] == '0') //判树空
T = NULL;
else{
T = new Treenode;//根
T->data = e[i];
Creatree(T->lchild, e,++i); //左
Creatree(T->rchild, e,++i); //右
}
}
//两树的比较(遍历改造)***
int Compare(Tree &T1, Tree &T2,int &flag) {
if (T1 == NULL&&T2 || T2 == NULL&&T1 )
flag = 0;
if (T1 != NULL && T2 != NULL) { //均不空
if (T1->data != T2->data)
flag = 0;
else { //比较两树的左子树 / 右子树
Compare(T1->lchild, T2->lchild,flag);
Compare(T1->rchild, T2->rchild,flag);
}
}
return flag;
}
int main() {
char e1[100]; //T1
char e2[100]; //T2
while (cin >> e1&&e1[0]!='0') {
cin>>e2; //输入一个0就退出 则暗示了不用输入第二棵树任何数值
Tree T1;
Tree T2;
int i = -1;
int j = -1;
Creatree(T1, e1, ++i); //建树T1
Creatree(T2, e2, ++j); //建树T2
int flag = 1; // (标志) 1:相等 0:不等
if (Compare(T1, T2,flag) == 1)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}