245. 子树
来源:互联网 发布:sqlserver 2012 版本 编辑:程序博客网 时间:2024/06/08 02:03
描述:
有两个不同大小的二叉树: 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
标签:递归 二叉树
思路:
利用递归,从根节点往下递归,判断子树是否存在其的左子树或右子树内。
代码:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
* 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:
bool issubtree;
bool isSubtree(TreeNode *T1,TreeNode *T2){
issubtree=false;
preorderTraversal(T1,T2);
if(T2==NULL){
issubtree=true;
}
return issubtree;
}
void preorderTraversal(TreeNode *root,TreeNode *node){
if(root!=NULL&&issubtree==false){
issubtree=Judge(root,node);
preorderTraversal(root->left,node);
preorderTraversal(root->right,node);
}
}
bool Judge(TreeNode *node1,TreeNode *node2){
bool leftissubtree,rightissubtree;
if(node1!=NULL){
if(node2!=NULL&&node1->val==node2->val){
leftissubtree=Judge(node1->left,node2->left);
rightissubtree=Judge(node1->right,node2->right);
if(leftissubtree&&rightissubtree){
return true;
}
}
}
else {
if(node2==NULL){
return true;
}
}
return false;
}
};
public:
bool issubtree;
bool isSubtree(TreeNode *T1,TreeNode *T2){
issubtree=false;
preorderTraversal(T1,T2);
if(T2==NULL){
issubtree=true;
}
return issubtree;
}
void preorderTraversal(TreeNode *root,TreeNode *node){
if(root!=NULL&&issubtree==false){
issubtree=Judge(root,node);
preorderTraversal(root->left,node);
preorderTraversal(root->right,node);
}
}
bool Judge(TreeNode *node1,TreeNode *node2){
bool leftissubtree,rightissubtree;
if(node1!=NULL){
if(node2!=NULL&&node1->val==node2->val){
leftissubtree=Judge(node1->left,node2->left);
rightissubtree=Judge(node1->right,node2->right);
if(leftissubtree&&rightissubtree){
return true;
}
}
}
else {
if(node2==NULL){
return true;
}
}
return false;
}
};
阅读全文
0 0
- 245.子树
- 245. 子树
- [LintCode]245.子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- Mysql主从配置(Mysql5.5)--Windows环境
- PIXI.js源码解析(1)——DisplayObject
- selenium模拟浏览器爬虫--以福建省土地使用权出让管理系统为例
- 学习笔记之面向对象编程15(容器之Iterator)
- 三种还是四种NLP的注意力机制的总结
- 245. 子树
- 遇到WEB-INF下不自动产生class文件的问题
- Oracle创建SEQUENCE
- 面向对象编程思想-解释器模式
- 视频编解码优化的几个概念
- Idea 和 Tomcat 的趣事
- HTML+CSS笔记
- 数据库语法报错:ERROR 1064 (42000):for the right syntax to use near 'XXXX'
- 数据库中的范式