博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
03-树1 树的同构
阅读量:4875 次
发布时间:2019-06-11

本文共 2225 字,大约阅读时间需要 7 分钟。

  这一题是课上例题,用到的递归思想较为关键。

1 #include 
2 #include
3 #define MaxTreeNodes 10 4 5 struct TreeNode{ 6 char Element; 7 int Left; 8 int Right; 9 };10 typedef struct TreeNode FullTree;11 FullTree T1[MaxTreeNodes], T2[MaxTreeNodes];12 13 int BuildTree(FullTree T[])14 {15 int Root;16 int i = -1, N;17 int check[10];18 char cl, cr;19 scanf("%d\n", &N); //'\n'一定要加!!20 if(N){21 for(i = 0; i < N; i++){22 check[i] = 0; //check[N]中没有被指向都为0,指向了就赋值为1,最后没被指向的就是根节点23 }24 for(i = 0; i < N; i++){25 scanf("%c %c %c\n", &T[i].Element, &cl, &cr);26 if(cl == '-')27 T[i].Left = -1;28 else{29 T[i].Left = cl - '0';30 check[T[i].Left] = 1;31 }32 if(cr == '-')33 T[i].Right = -1;34 else{35 T[i].Right = cr - '0';36 check[T[i].Right] = 1;37 }38 }39 for(i = 0; i < N; i++){40 if(!check[i])41 break;42 }43 }44 Root = i;45 return Root;46 }47 48 int isOmorphic(int R1, int R2)49 {50 if((R1 == -1) && (R2 == -1))51 return 1;52 if(((R1 != -1) && (R2 == -1)) || ((R1 == -1) && (R2 != -1)))53 return 0;54 if(T1[R1].Element != T2[R2].Element)55 return 0;56 if((T1[R1].Left == -1) && (T2[R2].Left == -1))57 return isOmorphic(T1[R1].Right, T2[R2].Right);58 if((T1[R1].Left != -1) && (T2[R2].Left != -1)59 && (T1[T1[R1].Left].Element) == (T2[T2[R2].Left].Element))60 return (isOmorphic(T1[R1].Left, T2[R2].Left) && isOmorphic(T1[R1].Right, T2[R2].Right));61 else62 return (isOmorphic(T1[R1].Left, T2[R2].Right) && isOmorphic(T1[R1].Left, T2[R2].Right));63 }64 65 int main(int argc, char const *argv[])66 {67 int R1, R2;68 R1 = BuildTree(T1);69 R2 = BuildTree(T2);70 if(isOmorphic(R1, R2))71 printf("Yes\n");72 else73 printf("No\n");74 return 0;75 }

  一开始没有加第20行的if(N)导致空树情况下总是错误,后来意识到虽然空树时没有进入循环,但是循环判断条件if语句还是执行了的,期间会使得i重置为0,使得Root结果错误。

转载于:https://www.cnblogs.com/biankun/p/8652373.html

你可能感兴趣的文章
LeetCode-指针法
查看>>
Python之路,Day12 - 那就做个堡垒机吧
查看>>
linux之shell之if、while、for语句介绍
查看>>
Mysql phpStudy升级Mysql版本,流产了怎么办?
查看>>
SQLServer之数据库行锁
查看>>
OFDM仿真
查看>>
代理模式
查看>>
AC日记——背包问题 V2 51nod 1086
查看>>
CSS关键字
查看>>
UIAlertView
查看>>
ES6快速入门(三)类与模块
查看>>
赛博web
查看>>
Java动手动脑第四讲课堂作业
查看>>
PowerDesigner 数据建模技术视频教程
查看>>
Webpack 开发服务器代理设置解决跨域问题
查看>>
Solr 15 - Solr添加和更新索引的过程 (文档的路由细节)
查看>>
DOS命令
查看>>
Oracle merge基本使用
查看>>
03-树1 树的同构
查看>>
第九周周记
查看>>