数据结构PTA第三周作业1:树的同构
2019-04-20 21:47
169 查看
4000
带讲解的原题,按照讲的思路写完程序出现了段错误,为此看了一篇相关的博客依然解决不了问题。
C/C++中的段错误:https://www.geek-share.com/detail/2549443820.html
后来看了别人的做法:
Debug1:改了数组checkroot的定义方式,通过的测试点由2个变成3个
Debug2:改了输入的字符串格式,\n改到了行首,就全部正确了
再把checkroot的定义方式改回原来的写法,还是全部通过(为什么一开始改就可以多增一个通过点?)
[code]#include<stdio.h> struct TreeNode{ char Element; int tl; int tr; }T1[100],T2[100]; int BuildTree(struct TreeNode T[]); int Isomorphic(int r1, int r2); int main() { int r1,r2; //根节点标号 r1 = BuildTree(T1); r2 = BuildTree(T2); if(Isomorphic(r1,r2)){ printf("Yes\n"); }else{ printf("No\n"); } return 0; } int BuildTree(struct TreeNode T[]) { int N, Root=-1; scanf("%d",&N); //读入树的节点个数 if(N){ //int* checkroot = (int*)malloc(sizeof(int)*N); //Debug1:2个正确->3个正确 int checkroot ; for(int i=0; i<N; i++) {checkroot[i]=0;} char l, r; for(int i=0; i<N; i++){ scanf("\n%c %c %c",&T[i].Element, &l, &r); //输入修改,全部正确 if(l!='-'){ T[i].tl = l - '0'; checkroot[T[i].tl] = 1; //这个标号的节点被别的节点指到过,不是根节点,标志位置1 } else{ T[i].tl = -1; } if(r!='-'){ T[i].tr = r - '0'; checkroot[T[i].tr] = 1; //这个标号的节点被别的节点指到过,不是根节点,标志位置1 } else{ T[i].tr = -1; } } for(int i=0; i<N; i++){ if(checkroot[i]==0) {Root=i;break;} } } return Root; } int Isomorphic(int r1, int r2) { if(r1==-1 && r2==-1) //两棵树均为空 {return 1;} if((r1==-1 && r2!=-1)||(r1!=-1 && r2==-1)) {return 0;} if(T1[r1].Element!=T2[r2].Element) {return 0;} if(T1[r1].tl==-1 && T2[r2].tl==-1) {return Isomorphic(T1[r1].tr, T2[r2].tr);} if((T1[r1].tl!=-1)&&(T2[r2].tl!=-1)&&(T1[T1[r1].tl].Element == T2[T2[r2].tl].Element)) {return Isomorphic(T1[r1].tl, T2[r2].tl) && Isomorphic(T1[r1].tr, T2[r2].tr); } else {return Isomorphic(T1[r1].tl, T2[r2].tr) && Isomorphic(T1[r1].tr, T2[r2].tl); } }
相关文章推荐
- PTA中国大学MOOC-陈越、何钦铭-数据结构-2017春课后作业03树1 树的同构
- PTA数据结构 5-3 树的同构
- 算法第三周作业02
- 数据结构第三周选择排序与快速排序差别
- 《实时控制软件设计》第三周作业
- 吴恩达深度学习第三周作业(Planar data classification with one hidden layer)
- 第三周作业
- 第三周作业 归并排序(接)
- 数据结构课后小作业 最大连续子序列和
- [数据结构PTA]串——删除字符串中的子串
- 辣鸡数据结构作业:简易银行管理系统
- programming language 第三周作业答案
- PTA数据结构之顺序表创建和就地逆置
- 第三周作业
- 马哥2016全新Linux+Python高端运维班第三周作业
- 马哥2016全新Linux+Python高端运维班第三周作业
- 马哥linux作业第三周'
- [数据结构]第六次作业:图的建立、遍历、最小生成树、最短路径
- 2019年春季学期第三周作业 编程总结
- 魏昊卿——《Linux内核分析》第三周作业:Linux系统启动过程