树的同构

给定两颗二叉树T1和T2,如果T1可以同过若干次左右孩子互换就变成T2,则我们称为两个树是同构的。现判断两棵树是否同构。

同构与不同构

【题目】

题意理解
第二棵树

【静态链表结构数组表示二叉树】

/* 静态链表二叉树 */
#define MaxTree 10
#define ElementType char
#define Tree int
#define Null -1

struct TreeNode
{
    ElementType Element;
    Tree Left;
    Tree Right;
}T1[MaxTree],T2[MaxTree];

/* 程序框架 */
int main()
{
    Tree R1,R2;

    R1=BuildTree(T1);
    R2=BuildTree(T2);
    if(Isomorphic(R1,R2))
        printf("Yes\n");
    else
        printf("No\n");

    return 0;
}

Tree BuildTree(struct TreeNode T[])
{
    scanf("%d\n",&N);
    if(N){
        for(i=0;i<N;i++) check[i]=0; //check为标志位
            for(i=0;i<N;i++){
                scanf("%c %c %c\n",&T[i].Element,&cl,&cr);
                if(cl!='-'){
                    /*check不为空,则说明存在子孩子
                        则将子孩子处的check置1,即存在被指向
                        在树中check为0,即没有被指向的节点就是root
                    */
                    T[i].Left=cl-'0';
                    check[T[i].Left]=1;
                }
                else
                    T[i].Left=NULL;

                if(cr!='-'){
                    T[i].Right=cl-'0';
                    check[T[i].Right]=1;
                }
                else
                    T[i].Right=NULL;
            }
            for(i=0;i<N;i++) //判别check值为0
                if(!check[i])   break;
            Root=i;
    }
    return Root;
}

int Isomorphic(Tree R1,Tree R2)
{
    if((R1==NULL)&&(R2==NULL))  
        return 1;
    if(((R1==NULL)&&(R2!=NULL))||((R1!=NULL)&&(R2==NULL)))
        return 0;
    if(T1[R1].Element!=T2[R2].Element)
        return 0;
    if((T1[R1].Left==NULL)&&(T2[R2].Left==NULL))
        return Isomorphic(T1[R1].Right,T1[R1].Right);
    if(((T1[R1].Left!=NULL)&&(T2[R2].Left!=NULL))&&
        ((T1[T1[R1].left].Element)==(T2[T2[R2].Left].Element)) )
        return (Isomorphic( T1[R1].Left, T2[R2].Left ) &&
            Isomorphic( T1[R1].Right, T2[R2].Right ) );
    else
        return ( Isomorphic( T1[R1].Left, T2[R2].Right) &&
            Isomorphic( T1[R1].Right, T2[R2].Left ) );
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 正文之前 在之前的【离散数学】图论中谈到过图的同构,今天我们来谈谈树的同构: 同构树同构有根树同构二叉树 正文 同...
    胖若两人_阅读 15,389评论 1 6
  • 03-树1 树的同构 (25分)给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两...
    有苦向瓜诉说阅读 402评论 0 0
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,840评论 1 31
  • 你笑着说 你的多篇文字里有我 那些庸常的点滴 在你笔尖一一细数 因你的文字里有我 我去读你的诗歌 不经意掀开一页 ...
    之之坔阅读 271评论 0 0
  • 输出是最好的学习,所以我把我所学所感收集整合分享出来,希望不仅能提高自己,也能给伙伴们带来或多或少的收获。 在当今...
    牛小丫53阅读 1,094评论 10 37

友情链接更多精彩内容