5-3 树的同构
来源:互联网 发布:淘宝网卫裤 编辑:程序博客网 时间:2024/06/15 23:56
点击打开链接
首先肯定是通过题目的输入来构造出两棵树,然后我们就对第一棵树中每一个结点来找出第二棵树中的对应结点,然后判断它们的孩子结点元素是否是一样的。两棵树中包含的结点个数和元素必须相同的,而对于第一棵树的每一个结点呢,在第一棵树我们都能找到一个与之对应的结点,并且它们的左右孩子结点的元素是相同的话,当然左右可以互换,这样的两棵树就是同构的。
#include<stdio.h>#include<stdlib.h>#include<iostream>using namespace std;#define null -1struct TreeNode{ char Element; int right,left;}T1[100],T2[100];int Buildtree(struct TreeNode T[]){ int n,chick[100],root; char left,right; cin>>n; if(n) { for(int i=0;i<n;i++) chick[i]=0; for(int i=0;i<n;i++) { cin>>T[i].Element>>left>>right; if(left != '-') { T[i].left=left-'0'; chick[T[i].left]=1; } else T[i].left=-1; if(right != '-') { T[i].right=right-'0'; chick[T[i].right]=1; } else T[i].right=-1; } for(int i=0;i<n;i++) { if(chick[i]==0) { root=i; break; } } } else root=-1; return root;}int isomorphic (int r1,int r2){ if(r1==null && r2==null) return 1; if((r1==null &&r2!=null)||(r1!=null&&r2==null)) return 0; if(T1[r1].Element != T2[r2].Element) return 0; if(T1[r1].left==null&&T2[r2].left==null) return isomorphic(T1[r1].right,T2[r2].right); if((T1[r1].left!=null && T2[r2].left!=null) && (T1[T1[r1].left].Element==T2[T2[r2].left].Element)) return (isomorphic(T1[r1].left,T2[r2].left) && isomorphic(T1[r1].right,T2[r2].right) ); else return (isomorphic(T1[r1].left,T2[r2].right) && isomorphic(T1[r1].right,T2[r2].left) );}int main(){ int root1,root2; root1=Buildtree(T1); root2=Buildtree(T2); if(isomorphic(root1,root2)==0) cout<<"No"; else cout<<"Yes";}
阅读全文
1 0
- 5-3 树的同构
- 5-3 树的同构
- PTA数据结构 5-3 树的同构
- 5-3 树的同构 (25分)
- 5-3 树的同构 (25分)
- 5-3 树的同构 (25分)
- 5-3 树的同构(非递归——懒法)
- 5-3 树的同构 (25分) PTA
- PTA 5-10 树的同构
- 实例3-1 树的同构
- 同构树的判别
- 树的同构
- SDUTOJ 树的同构
- 树的同构
- 树的同构
- pta--树的同构
- 判断树的同构
- 树的同构
- CryEngine Plugin 创建
- 手把手教你制作一张哆啦A梦的壁纸
- 我的爸爸刘狗蛋
- 【C++学习笔记】模板于内联函数使用注意
- 数据结构与算法分析 c++11 红黑树 (Red black tree)
- 5-3 树的同构
- 基于拉格尔函数模型的预测控制在线自辩识问题
- Asp.Net MVC4 Bundle捆绑压缩技术
- 【转】 ThreadPoolExecutor使用介绍
- HoloLens开发笔记-使用UGUI-创建按钮
- HBase笔记-2.安装
- Web基础之Cookie对象与Session对象(一)
- 【大数据部落】r语言多均线量化策略回测
- 序列化protobuf