lintcode.245 子树
有两个不同大小的二进制树: T1
有上百万的节点; T2
有好几百的节点。请设计一种算法,判定 T2
是否为 T1
的子树。
注意事项
若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。
下面的例子中 T2 是 T1 的子树:
1 3
/ \ /
T1 = 2 3 T2 = 4
/
4
下面的例子中 T2 不是 T1 的子树:
1 3
/ \ \
T1 = 2 3 T2 = 4
/
4
- 很神奇的一道题,有个样例是{9,9,9,9,9,9,9.......},会卡住。
就是说开始判断时,子树为空有的节点,树上也不能有,否则就不是子树了。一开始一直没想明白。- AC代码,
- /**
- * Definition of TreeNode:
- * class TreeNode {
- * public:
- * int val;
- * TreeNode *left, *right;
- * TreeNode(int val) {
- * this->val = val;
- * this->left = this->right = NULL;
- * }
- * }
- */
- class Solution {
- public:
- /*
- * @param T1: The roots of binary tree T1.
- * @param T2: The roots of binary tree T2.
- * @return: True if T2 is a subtree of T1, or false.
- */
- bool isSubtree(TreeNode *T1, TreeNode *T2) {
- bool result = false;
- if (T2 == NULL)
- {
- return true;
- }
- if (T1 == NULL)
- {
- return false;
- }
- if (T1->val == T2->val) {
- result = hasSubtree(T1,T2);
- }
- if (!result) {
- result = isSubtree(T1->left,T2);
- }
- if (!result) {
- result = isSubtree(T1->right,T2);
- }
- return result;
- }
- bool hasSubtree(TreeNode *T1, TreeNode *T2)
- {
- if(T2==NULL && T1==NULL)
- return true;
- if (T1 != NULL && T2!=NULL && T1->val == T2->val)
- {
- return hasSubtree(T1->left,T2->left) && hasSubtree(T1->right,T2->right);
- }
- return false;
- }
- };
很尴尬的是,同样的代码,会runtime error。
代码如下:
- /**
- * Definition of TreeNode:
- * class TreeNode {
- * public:
- * int val;
- * TreeNode *left, *right;
- * TreeNode(int val) {
- * this->val = val;
- * this->left = this->right = NULL;
- * }
- * }
- */
- class Solution {
- public:
- /**
- * @param T1, T2: The roots of binary tree.
- * @return: True if T2 is a subtree of T1, or false.
- */
- bool isSubtree(TreeNode *T1, TreeNode *T2) {
- // write your code here
- bool res= false;
- if(T2 == NULL)
- return true;
- if(T1 == NULL)
- return false;
- if(T1 -> val == T2 -> val)
- res = cmp(T1,T2);
- if(!res)
- res=isSubtree(T1->left,T2);
- if(!res)
- res=isSubtree(T1->right,T2);
- return res;
- }
- bool cmp(TreeNode *T1,TreeNode *T2){
- if(T2 == NULL && T1 == NULL)
- return true;
- if(T1 -> val == T2 -> val && T1 != NULL && T2 != NULL)
- return cmp(T1->left,T2->left) && cmp(T1->right,T2->right);
- return false;
- }
- };
这就很尴尬了,我也不知道咋回事。。。求大佬指点
lintcode.245 子树的更多相关文章
- LintCode 子树
easy 子树 19% 通过 有两个不同大小的二进制树: T1 有上百万的节点: T2 有好几百的节点.请设计一种算法.判定 T2 是否为 T1的子树. 您在真实的面试中是否遇到过这个题? Yes 例 ...
- lintcode:Subtree 子树
题目: 子树 有两个不同大小的二叉树: T1 有上百万的节点: T2 有好几百的节点.请设计一种算法,判定 T2 是否为 T1的子树. 样例 下面的例子中 T2 是 T1 的子树: 1 3 / \ / ...
- LintCode题解之子树
思路: 最简单的方法,依次遍历比较就可以了. AC代码: /** * Definition of TreeNode: * public class TreeNode { * public int va ...
- 245. Subtree【LintCode java】
Description You have two very large binary trees: T1, with millions of nodes, and T2, with hundreds ...
- 子树(LintCode)
子树 有两个不同大小的二进制树: T1 有上百万的节点:T2 有好几百的节点.请设计一种算法,判定 T2 是否为 T1的子树. 样例 下面的例子中 T2 是 T1 的子树: 1 3 / \ / T1 ...
- [LintCode]——目录
Yet Another Source Code for LintCode Current Status : 232AC / 289ALL in Language C++, Up to date (20 ...
- (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)
--------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...
- leetcode & lintcode for bug-free
刷题备忘录,for bug-free leetcode 396. Rotate Function 题意: Given an array of integers A and let n to be it ...
- leetcode & lintcode 题解
刷题备忘录,for bug-free 招行面试题--求无序数组最长连续序列的长度,这里连续指的是值连续--间隔为1,并不是数值的位置连续 问题: 给出一个未排序的整数数组,找出最长的连续元素序列的长度 ...
随机推荐
- fodera20安装后的配置
最近安装了Fedora 20 64bit,以下是一些优化配置,使之更适合国人使用. 1,安装gnome-tweak-tool设置工具 Fedora 19自带的系统设置工具十分简单,一些重要的地方都不能 ...
- JavaWeb(五)Filter过滤器
Filter过滤器 Fileter介绍 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Serv ...
- Jsp/html页面删除前进行删除提示
HTML代码 <body> <a href="javascript:if(window.confirm('是否?')){window.location.href='test ...
- 【Java学习笔记之三十二】浅谈Java中throw与throws的用法及异常抛出处理机制剖析
异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被卡死,处于一直等待,或死循环. 异常有两个过程,一个是抛出异常:一个是捕捉异常. 抛出异常 抛出异常有三种形式,一是throw, ...
- java面向对象(五)之多态
多态 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. ...
- java面向对象(二)之继承
继承 介绍 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力.继承即常说的is-a关系.子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承 ...
- bugly cocos 接入和 符号表使用
bugly cocos 接入和 符号表使用 在bugly网站下载 BuglyCocosPlugin 的sdk ios 1. 在 项目的 classes 里面新建 文件夹 BuglyCocosPlug ...
- maven 自我学习笔记
1.常用网站: maven.apache.org http://mvnrepository.com/ 2.命令 mvn -v 查看maven的版本 mvn -compile 在项目的根目录下编译项 ...
- [js高手之路]Vue2.0基于vue-cli+webpack Vuex用法详解
在这之前,我已经分享过组件与组件的通信机制以及父子组件之间的通信机制,而我们的vuex就是为了解决组件通信问题的 vuex是什么东东呢? 组件通信的本质其实就是在组件之间传递数据或组件的状态(这里将数 ...
- [自制操作系统] 图形界面&VBE工具&MMIO显存&图形库/字库
本文记录了在JOS(或在任意OS)上实现图形界面的方法与一些图形库的实现. 本文中支持的新特性: 支持基本图形显示 支持中英文显示(中英文点阵字库) 相关:VBE VESA MMIO 点阵字库 Git ...