树的子结构
2015-09-19 19:34
309 查看
输入两颗二叉树A,B,判断B是不是A的子结构。
递归分治
递归分治
#include <cstdio> #include <cstdlib> #include <string> #include <iostream> #include <queue> #include <queue> #include <cstring> #include <stack> #include <cmath> #include <algorithm> #include <vector> #if(defined(_WIN32) || defined(__WIN32__)) typedef __int64 LL; typedef unsigned __int64 ULL; #define ll I64 #else typedef long long LL; typedef unsigned long long ULL; #define I64 ll #endif using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; char str[40]; int g = 0; int len; TreeNode * construct(){ if(g == len) return NULL; if(str[g] == '#') { g++; return NULL; } TreeNode *p = new TreeNode(str[g++]-'0'); p->left = construct(); p->right = construct(); return p; } bool is(TreeNode*p, TreeNode*q){ if(q == NULL) return true; if(p == NULL) return false; if(p->val == q->val) return is(p->left, q->left) && is(p->right, q->right); return false; } bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if(pRoot1 == NULL || pRoot2 == NULL) return false; return is(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2); } int main(void){ strcpy(str, "88792####4"); g = 0; len = strlen(str); TreeNode*p = construct(); strcpy(str, "892"); g = 0; len = strlen(str); TreeNode*q = construct(); cout<<HasSubtree(p, q)<<endl; return 0; }
相关文章推荐
- Java基金会——JUnit
- Linux内核笔记——内存管理之slab分配器
- 多态解读
- netstat查看端口指令
- GoldenGate 配置
- 本库主要提供一些类和一些函数来比较不同序列对象
- JAVA学习资源种子
- Unity3d NGUI伪自适应
- 阶梯问题
- 测试要点的提取
- QT对话框中show和exec的区别
- Java事件类型小结
- Oracle学习笔记20150919异常处理表与方案的备份
- View机制深入学习(三) View中的消息传递及InputManagerService
- HDU 5455.Fang Fang【2015 ACM/ICPC Asia Regional Shenyang Online】【字符串处理】9月19
- Dom4J对XML文件的读取和写入
- Codeforces Round #319 (Div. 2) (ABCE题解)
- SPOJ QTREE Query on a tree
- java对象的理解
- java对象引用概念