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

来源:互联网 发布:电脑编程入门自学黑客 编辑:程序博客网 时间:2024/06/06 14:11

题目位置
通过编号 知道
它的 位置信息,但 因为不是完全二叉树,所以并不能判断 他具体位置。(但树根 知道具体位置)
通过 左 右 编号 知道 每一个节点的 左右子树是谁。
问题: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
原创粉丝点击