Leetcode-每日一题【剑指 Offer 26. 树的子结构】

题目

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

B是A的子结构, 即 A中有出现和B相同的结构和节点值。

例如:

给定的树 A:

3
/ \
4 5
/ \
1 2

给定的树 B:

4
/
1

返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。

示例 1:

输入: A = 1,2,3, B = 3,1
**输出:**false

示例 2:

输入: A = 3,4,5,1,2, B = 4,1
**输出:**true

限制:

  • 0 <= 节点个数 <= 10000

解题思路

1.题目要求我们判断B是不是A的子结构,我们用递归来解决这个问题。

2.二叉树 B 为 A 的子结构的情况一共有三种,满足其中一种即可:

①子结构 B 的起点为 A 的根节点,即从 A 的根节点开始和 B 比较, 调用函数 isSubStree:

  • 不相等,则返回 false;
  • 相等,则再比较 左子树和右子树都是否相等,都相等,才返回 true

②子结构 B 在 A 的左子树中,即 B 的起点隐藏在 A 的左子树中,此时调用函数 isSubStructure;

③子结构 B 在 A 的右子树中,即 B 的起点隐藏在 A 的右子树中,此时调用函数 isSubStructure。

3.举个例子:

我们先从 A 的根节点开始和 B 比较,调用函数 isSubStree:

根节点相等,则再比较 左子树和右子树都是否相等,都不1相等,返回 false。

我们猜测子结构 B 在 A 的左子树中,即 B 的起点隐藏在 A 的左子树中,此时调用函数 isSubStructure

在左子树中调用函数 isSubStree,根节点都不同则返回 false;再往左子树走,

依旧不同,此时我们返回上一级,去看看右子树

也不同,此时A的左子树全部检索完毕,我们需要检索右子树

这时我们调用函数 isSubStree,根节点相等,则再比较 左子树和右子树都是否相等,都相等,返回 true。代表我们找到了子结构。

代码实现

java 复制代码
lass Solution {
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        if(A == null || B == null){
            return false;
        }
        if(isSubTree(A, B)){
            return true;
        }
        if(isSubStructure(A.left, B) || isSubStructure(A.right, B)){
            return true;
        }
        return false;

    }
    boolean isSubTree(TreeNode TA, TreeNode TB){
        if(TB == null){
            return true;
        }
        if(TA == null){
            
            return false;
        }
        if(TB.val != TA.val){
            return false;
        }
        return isSubTree(TA.left , TB.left) &&
        isSubTree(TA.right, TB.right);
    }

}

测试结果

相关推荐
糖果店的幽灵18 小时前
人已经用 WorkBuddy 找工作拿了面试,你还在一份份手工改简历
人工智能·面试·职场和发展·langgraph
imuliuliang19 小时前
关于数据结构在算法设计中的核心作用解析7
算法
2401_8949155320 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
普通网友21 小时前
共识算法实现:从工作量证明到权益证明的演进
算法·区块链·共识算法
ldmd2841 天前
地图生成算法(噪声篇-Perlin,Simplex,Value noise)
算法·go·地图生成
国科安芯1 天前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
小陈phd1 天前
集成检索介绍
算法
小poop1 天前
轮转数组:从暴力到最优,一题掌握算法复杂度分析
数据结构·算法·leetcode