描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
 
求解思路:
  1. 首先肯定是找到树A中等于树B根节点的节点。
  2. A和B按照同样的遍历顺序比较,如果全相同A就是子树。

代码:

 1 class Solution {
2 public:
3 // 肯定是先在A中找到和B根节点相同的节点
4 // 舍弃的思路:然后可以通过向量记录比较顺序,1为左,2为右=》有点难以保证正确性
5 // 采取的思路:A就按照B的遍历顺序,依次比较B的节点val,如果全相同,就是的
6 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
7 // 遍历A树找B的根节点,这里先序遍历较快点
8 if(pRoot1==nullptr || pRoot2==nullptr) return false;
9 return subStruct(pRoot1,pRoot2) ||
10 HasSubtree(pRoot1->left,pRoot2) ||
11 HasSubtree(pRoot1->right,pRoot2);
12 }
13
14 // 用层次遍历肯定是可以的,如果就用前序遍历可以吗?
15 bool subStruct(TreeNode* ar,TreeNode* br){
16 if(br==NULL) return true; // B树节点为nullptr,就不需要比了
17 if(br!=NULL && ar==NULL) return false; // 防止段错误
18 if(br->val!=ar->val) return false; // 其实这里和上面一行都是逻辑判断,也就是前序比较部分
19 return subStruct(ar->left, br->left) && // AB按照相同遍历顺序比较
20 subStruct(ar->right, br->right);
21 }
22 };

最新文章

  1. Android之仿微信Tab滑动
  2. HTTP权威指南笔记-2.URL与资源
  3. vue安装
  4. javascript取一周的日期
  5. Why does pthread_cond_signal not work?【转】
  6. 关于ajax请求数据后,数据本身的js失效的一些想法
  7. uploadify多图片上传实例
  8. mysql中union与union all的区别
  9. 理解C#系列 / 核心C# / 常量
  10. [51NOD1126]求递推序列的第n项(矩阵快速幂)
  11. 11.java.lang.ArrayStoreException
  12. FPGA知识大梳理(二)verilogHDL语法入门(1)
  13. 解读Raft(一 算法基础)
  14. JavaScript 跨域之 POST 实现。
  15. Atcoder Beginner Contest 115 D Christmas 模拟,递归 B
  16. hive1.1.0安装
  17. 加载驱动三种execute
  18. Linux shell while
  19. Ubuntu16.04 安装lamp环境
  20. iOS开发之AFNetworking实现数据传输和文件上传

热门文章

  1. Spring Aop的执行顺序
  2. [Docker核心之容器、数据库文件的导入导出、容器镜像的导入导出]
  3. Linux基本命令精讲
  4. 关于开箱即用的文档静态网站生成器VuePress
  5. 流程自动化RPA,Power Automate Desktop系列 - 创建WPF程序安装包及升级包
  6. BFS经典面试题——C++版
  7. 教你几招HASH表查找的方法
  8. vue elementui table 内按钮跳转页面
  9. ACdream 1007 a+b 快速幂 java秒啊,快速幂 避免 负数移位出错
  10. Docker+Vagrant+Gitlab 构建自动化的 CI/CD