剑指offer(十七)数的子结构
来源:互联网 发布:手机分轨软件 编辑:程序博客网 时间:2024/05/29 19:35
题目
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
案例
- 输入:{8,8,7,9,2,#,#,#,#,4,7},{8,9,2}
- 输出:true
分析
- 需要一个个去遍历节点,如果当前节点的值等于B节点的根节点的值
- 那就从此节点开始,遍历其和B链表的所有节点
- 如果不符合,则继续往下遍历A链表
解题代码
/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { // 判断是否是空结构 if(root1 == null || root2 == null) return false; boolean flag = topCompare(root1, root2); if(!flag) { return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } return flag; } // 判断从根节点开始是否相等 private boolean topCompare(TreeNode root1, TreeNode root2) { //必须放在下一行代码前面,因为两者同时为null的时候,其实是成功的 if(root2 == null) return true; if(root1 == null) return false; if( root1.val == root2.val ) { return topCompare(root1.left, root2.left) && topCompare(root1.right, root2.right); } else { return false; } }}
- 总结
- 这种寻找子结构的让我想到了在字符串中寻找是否包含子字符串的情况
- 正常情况下,是需要一个个字符遍历,一旦第一个和子串第一个相等的时候,然后开始比较往后的字符串是否相等,时间复杂度为O(mn)
- 但是看到一个算法,KMP算法,经过其优化之后,时间复杂度可缩短至O(m+n)
- KMP算法详情:字符串匹配的KMP算法
阅读全文
1 0
- 剑指offer(十七)数的子结构
- 剑指Offer--面试题18:数的子结构--Java实现
- 树的子结构(剑指offer)递归
- 剑指Offer:树的子结构(JAVA)
- 【剑指 offer】(十八)—— 树的子结构
- 剑指offer(19):树的子结构
- 剑指offer(14)-树的子结构
- 剑指offer:树的子结构(java)
- 剑指Offer——(17)树的子结构
- 【剑指offer-解题系列(17)】树的子结构
- 剑指offer--树的子结构(牛客网)
- 剑指offer第17题(树的子结构)
- 剑指offer之树的子结构(Python)
- 树的子结构 (剑指Offer 第 16 题)
- 剑指offer:判断树的子结构
- 【剑指offer】树的子结构
- 【剑指offer】Q18:树的子结构
- 剑指offer--17树的子结构
- 信道估计算法
- CSS居中及布局
- Android OpenGL ES 绘图 -- 材质渲染
- CmakeList相关
- js字符串函数
- 剑指offer(十七)数的子结构
- 数据结构之双向链表
- 4093:倒排索引查询--bitmap并查集
- leetcode 编程题 系列 (二分查找)旋转数组的查找、重复数字 33 153
- setsockopt函数解释
- Qt 之 QSqlDriverPlugin Class
- QGC中MainWindow与QML
- SSH综合项目实战(快递) -- day01 环境搭建及easyui、ztree使用介绍
- Web网站架构和演进过程