中国大学MOOC-陈越、何钦铭-数据结构-2017秋 03-树1 树的同构(25 point(s))

题目位置
通过编号 知道
它的 位置信息,但 因为不是完全二叉树,所以并不能判断 他具体位置。(但树根 知道具体位置)
通过 左 右 编号 知道 每一个节点的 左右子树是谁。
问题:1、不知道 节点的 父节点是谁
通过分析,所给信息足够解决问题,估不解决问题1。
总结:1、strcmp 传参为 字符串 ,字符 直接用==比较,传参并且必须为地址
相等返回 0
* 2、部分代发重复,因变量类型设置错误造成*

#include <stdio.h>
#include <stdlib.h>
struct BinTree{
    char data[2];
    int left;
    int right;
};
typedef struct BinTree *Tree;
void cmpTree();
int main(){
   int size1,size2;
   int i,j;
   char left[2],right[2];
   scanf("%d",&size1);

   Tree T = (Tree)malloc(size1*sizeof(struct BinTree));
   for(i=0;i<size1;i++)
   {
        scanf("%s %s %s",&(T+i)->data,&left,&right);
        if(strcmp("-",left))(T+i)->left = atoi(left);else (T+i)->left = -1;
        if(strcmp("-",right))(T+i)->right = atoi(right);else (T+i)->right = -1;
   }
   Tree bT = (Tree)malloc(size2*sizeof(struct BinTree));
   scanf("%d",&size2);
   for(i=0;i<size2;i++)
   {
        scanf("%s %s %s",&(bT+i)->data,&left,&right);
        if(strcmp("-",left))(bT+i)->left = atoi(left);else (bT+i)->left = -1;
        if(strcmp("-",right))(bT+i)->right = atoi(right);else (bT+i)->right = -1;
   }
    cmpTree(T,bT,size1);
}
void cmpTree(Tree aT,Tree bT,int size){
    int i,j;
    char left1,right1;
    char left2,right2;
    int flag = -1;
    for(i=0;i<size;i++)
    {
        for(j=0;j<size;j++)
        {
            if(strcmp((aT+i)->data,(bT+j)->data)==0)break;
        }
        if((aT+i)->left!=-1)left1 = ((aT+(aT+i)->left)->data)[0];else left1 = '*';
        if((aT+i)->right!=-1)right1 = (aT+(aT+i)->right)->data[0];else right1 = '*';
        if((bT+j)->left!=-1)left2 = (bT+(bT+j)->left)->data[0];else left2 = '*';
        if((bT+j)->right!=-1)right2 = (bT+(bT+j)->right)->data[0];else right2 = '*';
//        printf("\n %c %c %c %c",left1,right1,left2,right2);

       if(left1!=left2||right1!=right2)
       if(left1!=right2||right1!=left2)flag = 0;

    }
    if(flag)printf("Yes");
    else printf("No");



}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值