/*
判断二叉树是否相似
相似:两个二叉树都是空的二叉树或只有一个根节点 或者 左右子树都是相似的
算法源自王道数据结构
*/
#include <iostream>
#include <cstdlib>
using namespace std;
typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild, *rchild;
}*BiTree;
//创建二叉树
void CreateTree(BiTree &t){
//递归创建二叉树,输入#代表空树
ElemType e;
cin >> e;
if(e!='#'){
t = (BiTree)malloc(sizeof(BiTNode));
t->data = e;
CreateTree(t->lchild);
CreateTree(t->rchild);
}else{
t = NULL;
}
}
//判断两个二叉树是否相似
bool SimilarTree(BiTree t1, BiTree t2){
if(t1==NULL && t2==NULL){ //两树都为空
return true;
}else if((t1==NULL&&t2!=NULL) || (t1!=NULL&&t2==NULL)){ //一树为空
return false;
}else{ //两树都不为空
return SimilarTree(t1->lchild, t2->lchild) && SimilarTree(t1->rchild, t2->rchild);
}
return false;
}
int main(){
BiTree t1, t2;
cout << "请输入第一个二叉树:";
CreateTree(t1);
cout << "请输入第二个二叉树:";
CreateTree(t2);
if(SimilarTree(t1, t2)){
cout << "两个二叉树相似" << endl;
}else{
cout << "两个二叉树不相似" << endl;
}
return 0;
}
程序小白,如果代码中有任何问题,欢迎指出。