1、树的同构
- 题目
03-树1 树的同构 (25分) - 分析
1.程序主体基本上是:
int main()
{
建二叉树1;
建二叉树2;
判断是否同构并输出;
return 0;
}
2.如何存储和表示树
经分析,可以直接用数组来存储树。
具体树的表示可以用一个结构体。
struct TreeNode{
char data;
int L;
int R;
};
3.如何确定树根
树根是没有任何一个结点的左右子树指向它的。
所以可以用一个数组checked[]来保存是否有某一个结点的子树指向它,如果checked[i]==false,那么说明i所在的结点就是树根。
4.如何判断两个树是否同构
首先判断是否有空树;
然后判断根结点中的data是否相同;
再判断是否:
树1的左子树和树2的左子树同构 && 树1的右子树和树2的右子树同构
|| 树1的左子树和树2的右子树同构 && 树1的右子树和树2的左子树同构
- 我的代码
#include<iostream>
using namespace std;
struct TreeNode{
char data;
int L;
int R;
};
const int maxn = 10;
struct TreeNode trees1[maxn],trees2[maxn];
//输入根结点,判断两棵树是否同构
bool isomorphism(int root1, int root2)
{
if(root1==-1 || root2==-1)
{
return ((root1==-1) && (root2==-1));
}else if(trees1[root1].data != trees2[root2].data){