编程语言:Java
题目:
题解:终于写出来了,成就感满满,解释见注解。
结果:AC
importjava.io.*;importjava.util.Scanner;publicclassMain{staticStreamTokenizer in=newStreamTokenizer(newBufferedReader(newInputStreamReader(System.in)));staticPrintWriter out=newPrintWriter(newOutputStreamWriter(System.out));staticScanner sc=newScanner(newBufferedInputStream(System.in));static node[] a,b;publicstaticvoidmain(String[] args)throwsIOException{int n=sc.nextInt(); a=new node[n]; sc.nextLine();for(int i=0;i<n;i++){String[] str=sc.nextLine().split(" "); a[i]=newnode(str[0],str[1],str[2]);}int m=sc.nextInt(); b=new node[m]; sc.nextLine();for(int i=0;i<m;i++){String[] str=sc.nextLine().split(" "); b[i]=newnode(str[0],str[1],str[2]);}if(n!=m)//两者长度不一致,肯定No out.println("No");elseif(n==0)//两者均为空树,肯定Yes out.println("Yes");else{int x=find(a,"A");if(x<0)//第一棵树中没有根结点,肯定No out.println("No");else{int y=find(b,a[x].data);if(y<0)//第二棵树中没有相同结点,肯定No out.println("No");else{//两棵树都找好根结点了,开始遍历if(search(a[x],b[y])) out.println("Yes");else out.println("No");}}} out.flush();}//在传入数组中,找到数据为data的结点的下标并返回privatestaticintfind(node[] arr,String data){for(int i=0;i<arr.length;i++){if(arr[i].data.equals(data))return i;}return-1;}privatestaticbooleansearch(node x,node y){//写的很通俗易懂,自己看吧if(x.data.equals(y.data)){boolean flag1=false;boolean flag2=false;if(x.left.equals("-")){if(y.right.equals("-")){if(x.right.equals("-")&&y.left.equals("-"))returntrue;elseif(!x.right.equals("-")&&!y.left.equals("-"))returnsearch(a[Integer.parseInt(x.right)],b[Integer.parseInt(y.left)]);}elseif(y.left.equals("-")){if(!x.right.equals("-"))returnsearch(a[Integer.parseInt(x.right)],b[Integer.parseInt(y.right)]);}else{returnfalse;}}else{if(y.right.equals("-")){if(!x.right.equals("-"))returnfalse;elsereturnsearch(a[Integer.parseInt(x.left)],b[Integer.parseInt(y.left)]);}elseif(y.left.equals("-")){if(!x.right.equals("-"))returnfalse;elsereturnsearch(a[Integer.parseInt(x.left)],b[Integer.parseInt(y.right)]);}else{ flag1=search(a[Integer.parseInt(x.left)],b[Integer.parseInt(y.right)])&&search(a[Integer.parseInt(x.right)],b[Integer.parseInt(y.left)]); flag2=search(a[Integer.parseInt(x.left)],b[Integer.parseInt(y.left)])&&search(a[Integer.parseInt(x.right)],b[Integer.parseInt(y.right)]);return flag1||flag2;}}}returnfalse;}}class node{String data;String left;String right;publicnode(String data,String left,String right){this.data=data;this.left= left;this.right= right;}}
上一个:Web支持可暂停的超大文件上传
热门文章
- 「1月21日」2025年最新高速Clash/SSR/Shadowrocket/V2ray免费节点订阅链接地址分享
- vue的router-link的replace属性&编程式路由导航&缓存路由组件&两个新的生命周期钩子&路由守卫
- 「1月12日」2025年最新高速Shadowrocket/V2ray/Clash/SSR免费节点订阅链接地址分享
- 「2月19日」2025年最新高速Shadowrocket/Clash/SSR/V2ray免费节点订阅链接地址分享
- 动物疫苗的作用有哪些种类 动物疫苗的作用有哪些种类的
- 宠物粮食上市(宠物粮食上市公司名单)
- 「2月24日」2025年最新高速V2ray/Shadowrocket/Clash/SSR免费节点订阅链接地址分享
- 2021年国考公务员报名条件(国考公务员2021年考试报名条件)
- 日本韩国品牌服装排行榜(韩国本土少女衣服品牌)
- 动物疫苗生产厂家有哪些(生产动物疫苗的上市公司有哪些)