题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

【思路】要查找树A中是否存在和树B结构一样的子树,可以分成两步:

1.第一步在树A中找到和B的根节点的值一样的结点R;即当前树A包含子树B,HasSubtree(...)

2.第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构。即当前树A是否是子树B,IsSubtree(...)

 /*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool IsSubtree(TreeNode* pRoot1, TreeNode* pRoot2){
if(pRoot2 == NULL)
return true;
if(pRoot1 == NULL)
return false;
if(pRoot1->val == pRoot2->val){
return IsSubtree(pRoot1->left, pRoot2->left) && IsSubtree(pRoot1->right, pRoot2->right);
}else{
return HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
}
} bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){
if(pRoot1 == NULL || pRoot2 == NULL)
return false;
return IsSubtree(pRoot1,pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
}
};

最新文章

  1. python3 安装scrapy
  2. Object.assign方法复制或合并对象
  3. uoot启动过程
  4. svg中改变class调用的线条颜色
  5. 生成n个数的全排列【递归、回溯】
  6. python(2)-字符串(2)
  7. macbook安装mysql
  8. Babelfish (STL)
  9. 在CDockablePane中嵌入对话框
  10. Win10 & Linux Docker 安装使用
  11. Java加载资源文件的两种方法
  12. iOS-NSPredicate正则验证【三种验证方法】
  13. python 批量删除mysql前缀相同的表
  14. Raptor井字棋游戏
  15. C语言面对对象设计模式汇编
  16. exe4j中"this executable was created with an evaluation version exe4j"的解决
  17. mysql学习之路_乱码问题
  18. 多线程十之CopyOnWriteArrayList源码分析
  19. 一张elixir生产环境部署的图
  20. 新建oracle实例

热门文章

  1. PG进程结构和内存结构
  2. 【解决】docker 容器中 consul集群问题处理
  3. Java语言利用Collections.sort对Map,List排序
  4. linux下进程的最大线程数、进程最大数、进程打开的文件数
  5. angularjs Directive自定义指令详解
  6. Docker(三):部署软件
  7. MINA 框架总结 整体理解
  8. PHP计算两个时间戳之间间隔时分秒
  9. python_day4_shopping
  10. CDSビュー新規作成