美文网首页
树的同构

树的同构

作者: 日常表白结衣 | 来源:发表于2017-07-31 16:52 被阅读0次

给定两颗二叉树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 ) );
}

相关文章

  • 【离散数学】树(三)树的同构

    正文之前 在之前的【离散数学】图论中谈到过图的同构,今天我们来谈谈树的同构: 同构树同构有根树同构二叉树 正文 同...

  • 树的同构

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

  • mooc 树的同构

    03-树1 树的同构 (25分)给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两...

  • 03-树1 树的同构

    给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵...

  • 03 - 树 1 树的同构 (25 分)

    给定两棵树 T1 和 T2。如果 T1 可以通过若干次左右孩子互换就变成 T2,则我们称两棵树是 “同构” 的。例...

  • 3-1树的同构

    题目: 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给...

  • 判别二叉树

    程序框架搭建 Int main (){建二叉树1建二叉树2判别是否同构并输出Return 0;}需要设计的函数读数...

  • 同构

    一、同构开发 同构意为同一套代码,既可以运行在客户端(浏览器),又可以运行在服务器端(node)。 具体形式:后端...

  • 同构

    Bing 的一项研究表明:页面的加载时间每增加 10ms,站点年度总收入就会减少 $250K。 认识同构应用 现在...

  • 同构

    “悲哉,秋之为气也!萧瑟兮草木摇落而变衰,……”从宋玉《九辩》这里开始,千百年来,多少文人都在秋天里抒写愁...

网友评论

      本文标题:树的同构

      本文链接:https://www.haomeiwen.com/subject/vlgllxtx.html