算法编程题-判断一颗树中是否有与另一棵树拓扑结构完全相同的子树
来源:互联网 发布:linux下的下载工具 编辑:程序博客网 时间:2024/05/07 14:06
题目:
普通解法:二叉树遍历+匹配
时间复杂度O(N*M)
N:代表t1节点数 M:代表t2节点数
最优解法为二叉树序列化+KMP算法
时间复杂度O(M+N)
二叉树t1序列化 -> 字符串str1
二叉树t2序列化 -> 字符串str2
KMP算法判断str1中是否含有str2
如果str1包含str2,说明t1某棵子树于t2一致,否则t1中没有任何一颗子树与t2一致
实例代码如下:
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class IdenticalTree {public://先序遍历将二叉树序列化 string serial(TreeNode *root){string str;TreeNode *p = root;stack<TreeNode*> sk;while (p || !sk.empty()){while (p){sk.push(p);str = str+to_string(p->val)+'!';p = p->left;}if (nullptr == p)str += "#!";p = sk.top();sk.pop();p = p->right;}str += "#!";return str;} bool chkIdentical(TreeNode* A, TreeNode* B) { // write code here if(NULL == A || NULL == B) return false; string strA = serial(A); string strB = serial(B); //判断序列化后两者的包含关系,若A包含B,则满足题意 string::size_type idx = strA.find(strB); return (idx == string::npos) ? false:true; }};
阅读全文
1 0
- 算法编程题-判断一颗树中是否有与另一棵树拓扑结构完全相同的子树
- 判断tl树中是否有与t2树拓扑结构完全相同的子树
- 判断t1树中是否有与t2树拓扑结构完全相同的子树
- 判断t1树是否有与t2树拓扑结构完全相同的子树
- 二叉树问题---判断t1树中是否有与t2树拓扑结构完全相同的子树
- 判断一个树是否为另一棵树的子树
- 判断一棵树是否是另一棵树的子树
- 判断一棵树是否为另一棵树的子树
- 判断一棵树是否是另一棵树的子树
- 判断一棵树是否是另一棵树的子树
- 判断是否存在拓扑结构相同的子树(C++版)
- 程序员面试金典: 9.4树与图 4.8判断一棵树是否是另一棵树的子树
- 如何判断一棵二叉树树是否为另一棵二叉树的子树
- 判断一棵二叉树是否是另一棵二叉树的子树
- 判断一棵二叉树是否为另一棵二叉树的子树,Python实现
- 判断一棵二叉树是否是另一棵树的子树
- 二叉树面试题之判断一棵树是否为另一棵树的子树
- 海量数据:判断一棵树是否为另一棵树的子树
- 8.5—暴力枚举法—Combinations
- 建立多线程的两种方法
- select poll 与epoll模型的总结
- 8.6—暴力枚举法—Letter Combinations of a Phone Number
- Android Camera结合Zxing优化扫码
- 算法编程题-判断一颗树中是否有与另一棵树拓扑结构完全相同的子树
- 使用Aspose.Cells实现后台输出Excel报表(C#)
- java反射的field.get(null)
- 11.1—分治法—Pow(x,n)
- Ubuntu16.04如何将普通用户提升至root权限
- caffe随记(四) --- mnist示例超详细讲解
- Mac 使用 80 端口
- 11.2—分治法—Sqrt(x)
- 12.1—贪心法—Jump Game