拓扑结构相同子树练习题
来源:互联网 发布:大数据用什么软件 编辑:程序博客网 时间:2024/05/29 04:58
对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。
给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。
解题思路:我先把树序列化然后,进行字符串的对比。
public class IdenticalTree { public boolean chkIdentical(TreeNode t1, TreeNode t2){ String t1Str = serialByPre(t1); String t2Str = serialByPre(t2); return getIndexOf(t1Str, t2Str) != -1; } //KMP private int getIndexOf(String s, String m) { if(s == null || m == null || m.length() < 1 ||s.length() < m.length()){ return -1; } char[] ss = s.toCharArray(); char[] ms = m.toCharArray(); int[] nextArr = getNextArray(ms); int index = 0; int mi = 0; while(index < ss.length && mi < ms.length){ if(ss[index] == ms[mi]){ index++; mi++; }else if(nextArr[mi] == -1){ index++; }else{ mi = nextArr[mi]; } } return mi == ms.length? index - mi: -1; } private static int[] getNextArray(char[] ms) { if(ms.length == 1){ return new int[]{-1}; } int[] nextArr = new int[ms.length]; nextArr[0] = -1; nextArr[1] = 0; int pos = 2; int cn = 0; while(pos < nextArr.length){ if(ms[pos - 1] == ms[cn]){ nextArr[pos++] = ++cn; }else if(cn > 0){ cn = nextArr[cn]; }else{ nextArr[pos++] = 0; } } return nextArr; } private String serialByPre(TreeNode head) { if(head == null){ return "#!"; } String res = head.val + "!"; res += serialByPre(head.left); res += serialByPre(head.right); return res; }}
0 0
- 拓扑结构相同子树练习题
- 拓扑结构相同子树练习题
- 拓扑结构相同子树练习题
- 拓扑结构相同子树练习题
- [牛客]拓扑结构相同子树练习题
- 拓扑结构相同子树
- 拓扑结构相同子树
- 拓扑结构相同子树练习
- 拓扑结构相同子树-------------->_<
- 拓扑结构相同子树 类似[LintCode]245
- 判断是否存在拓扑结构相同的子树(C++版)
- 树的子结构和拓扑相同的子树
- 面试算法题解----拓扑结构相同的子树问题
- 简单编程题目连载(十三)——拓扑结构相同子树判断
- 判断tl树中是否有与t2树拓扑结构完全相同的子树
- 算法编程题-判断一颗树中是否有与另一棵树拓扑结构完全相同的子树
- 判断t1树中是否有与t2树拓扑结构完全相同的子树
- 判断t1树是否有与t2树拓扑结构完全相同的子树
- ubuntu 下安装VM12
- Android面试题(2)
- (学习总结)鸟哥基础篇第三版:第二十章
- [leetCode刷题笔记]2017.02.18
- 菜狗的C++ primer读书笔记:第二章 变量和基本类型
- 拓扑结构相同子树练习题
- BZOJ3514: Codechef MARCH14 GERALD07加强版
- css垂直居中的六种方法
- Codeforces 767A Snacktower
- python位运算纪录
- 746B Decoding
- asp.net core mvc剖析:KestrelServer
- 多项式输出
- java中的访问权限的修饰符09