当前位置: 首页 > java >正文

剑指offer23_树的子结构

树的子结构


输入两棵二叉树 A,B,判断 B 是不是 A 的子结构。

我们规定空树不是任何树的子结构。

数据范围

每棵树的节点数量 [ 0 , 1000 ] [0,1000] [0,1000]

样例

树 A:

     8/ \8   7/ \9   2/ \4   7

树 B:

   8/ \9   2

返回 true,因为 B 是 A 的子结构。


算法思路

第一部分:遍历树A
  • 递归遍历树A中的所有非空节点R
  • 对每个非空节点R,进行第二部分的匹配判断
第二部分:子树匹配判断

同时从根节点开始遍历两棵子树:

  1. 终止条件
    • 如果树B中的节点为空 → 匹配成功,返回true
    • 如果树A中的节点为空但树B不为空 → 匹配失败,返回false
    • 如果两节点都不为空但值不同 → 匹配失败,返回false
  2. 递归判断
    • 当前节点匹配成功后,递归判断左右子树:

时间复杂度分析

  • 最坏情况:需要遍历树A中的每个节点(n个),对每个节点都要完整遍历树B(m个)
  • 时间复杂度:O(n×m)
    • n:树A的节点数
    • m:树B的节点数
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:bool hasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {if(!pRoot1 || !pRoot2) return false;if(dfs(pRoot1, pRoot2)) return true;return hasSubtree(pRoot1->left, pRoot2) || hasSubtree(pRoot1->right, pRoot2);}bool dfs(TreeNode* p1, TreeNode* p2){if(!p2) return true;if(!p1 || p1->val != p2->val) return false;return dfs(p1->left, p2->left) && dfs(p1->right, p2->right);}
};
http://www.xdnf.cn/news/13764.html

相关文章:

  • ESP32S3 关于使用INMP441麦克风 和MAX98357AETE功放进行录音和播放
  • 复现论文报错解决
  • 新手速学:在线投票制作系统操作详细步骤
  • centos clamav 扫描及告警配置
  • 内网渗透测试技巧与利用操作手册(SMB / MSSQL / LDAP)
  • 全志A33安卓6.0添加支持usb摄像头动态热插拔
  • 换颜色 算法笔记
  • 新能源知识库(46)EMS与协控装置
  • 【深度学习-Day 27】模型调优利器:掌握早停、数据增强与批量归一化
  • 使用 C/C++的OpenCV 将多张图片合成为视频
  • 从零开始学Python(3)——函数
  • 第十三节:第七部分:Stream流的中间方法、Stream流的终结方法
  • 4、程序的固化和下载(一)
  • 《TCP/IP协议卷1》第11章 UDP:用户数据报协议
  • Error:Cannot find module ‘body-parser‘ | Require stack
  • 基于LQR控制算法的Simulink仿真
  • Harbor 2.12.2 and 2.12.3 初始化密码错误
  • 深度学习的分布式训练与集合通信(三)
  • 解决IntelliJ IDEA配置文件application.properties乱码的问题
  • 模型后处理可能包含的内容
  • Docker Docker Compose 一键安装
  • Ubuntu apt-get安装-报错:尝试“apt --fix-broken install”有未能满足的依赖关系,几种解决办法
  • 406. Queue Reconstruction by Height
  • 安装 Poppler(Windows)
  • Actix-web 中的权限中间件实现
  • 论文略读:Large Language Models Assume People are More Rational than We Really are
  • SQL进阶之旅 Day 27:存储过程与函数高级应用
  • 自检该如何写
  • 哈医大团队利用网络药理学+PPI分析+分子对接三联策略,解码灵芝孢子调控AKI凋亡的精准机制
  • 按关键字批量合并 Excel 多工作簿工作表攻略-Excel易用宝