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