lintcode 容易题:Subtree 子树
2015-10-12 22:35
239 查看
题目:
样例
下面的例子中 T2 是 T1 的子树:
下面的例子中 T2 不是 T1 的子树:
注意
若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。
解题:
感觉通过直接递归就可以解决,但是下面的程序运行到60%的测试数据结果就不对了
Java程序:
View Code
总耗时: 640 ms
子树
有两个不同大小的二叉树:T1有上百万的节点;
T2有好几百的节点。请设计一种算法,判定
T2是否为
T1的子树。
样例
下面的例子中 T2 是 T1 的子树:
1 3 / \ / T1 = 2 3 T2 = 4 / 4
下面的例子中 T2 不是 T1 的子树:
1 3 / \ \ T1 = 2 3 T2 = 4 / 4
注意
若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。
解题:
感觉通过直接递归就可以解决,但是下面的程序运行到60%的测试数据结果就不对了
Java程序:
""" Definition of TreeNode: class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None """ class Solution: # @param T1, T2: The roots of binary tree. # @return: True if T2 is a subtree of T1, or false. def isSubtree(self, T1, T2): # write your code here if(T1==None and T2==None): return True if T1==None: return False if T2==None: return True if T1.val!=T2.val: lft = self.isSubtree(T1.left,T2) rit = self.isSubtree(T1.right,T2) if lft or rit: return True else: res = self.isEqual(T1,T2) if res: return True else: lft = self.isSubtree(T1.left,T2) rit = self.isSubtree(T1.right,T2) if lft or rit: return True return False def isEqual(self,T1,T2): if T1==None and T2==None: return True if T1==None: return False if T2==None: return False if T1!=None and T2!=None and T1.val==T2.val: lft = self.isEqual(T1.left,T2.left) rit = self.isEqual(T1.right,T2.right) if lft and rit: return True return False
View Code
总耗时: 640 ms
相关文章推荐
- 手机页面禁止横屏显示
- Yii框架学习
- 九大排序算法总结
- 黑马程序员——集合中各个迭代的小例子
- Android 最火的快速开发框架XUtils
- 第二章 字符和字符串处理
- java实现二叉树的深度优先遍历和广度优先遍历
- button 鼠标点击的处理
- 黑马程序员-多线程部分(三.等待唤醒机制)
- 对关系代数的认识
- mysql命令
- Shell基础-环境变量配置文件
- jQuery autocomplete 自扩展插件、自动补全示例
- Linux下XAMPP的部署实战
- struts2 中怎样获取HttpServletReqest
- eclipse安装Genymotion插件
- Struts2默认Action处理类
- 数据结构(八)二叉树遍历
- 直接插入排序算法 C语言版
- 组合,聚合,关联,依赖 的区别