开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
小白专场
题意理解及二叉树表示
不是同构的(反面教材):
求解思路
-
二叉树表示
-
(链表的表示方法啊)
-
(一般的用数组表示二叉树做法)
-
结构数组表示二叉树:静态链表(物理上存储是数组,思想是一种链表的思想 )
-
A B C D是代表节点本身的信息(用来标识节点的),并且Left根Right不是指向左儿子右儿子的,而是指向他们的下标的,指向空节点用-1表示
静态链表数组实现代码 #define MaxTree 10 #define ElementType char #define Tree int #define Null -1 struct TreeNode { ElementType Element; Tree Left;//这里Left跟Right不是指针 Tree Right; }T1[MaxTree],T2[MaxTree];//NULL在C语言这个stdlb.h中定义是0 //静态链表优势:有链表的灵活性,但他的存储又是在数组上面
-
-
-
建二叉树
-
同构判别
程序框架、建树及同构判别
int main()
{
建二叉树1
建二叉树2
判别是否同构并输出
return 0;
}
需要设计的函数:
1.读数据建二叉树
2.二叉树同构判别
怎么判别二叉树是不是同构的代码实现
int main()
{
Tree R1,R2;
R1 = BuildTree(T1);//建第一棵树R1
R2 = BuildTree(T2);//建第二课树R2
if(Isomorphic(R1,R2)) printf("Yes\n");//判断二叉树是不是同构的
else printf("No\n");
return 0;
}
%c:转化为整数
Root:树根
根节点:哪个节点不存在其他节点指向他,那就是根节点
Root = ??? =>T[i]中没有任何结点的left(cl)和right(cr)指向它。只有一个
最后if(!check[i]) break;中返回的值是0的就是根结点,因为有指向的都被转化为1了
T[i].Left = cl - '0';的原因是我们是以字符的形式读取进来的,字符2减去字符0就是整数2