首页 > 基础资料 博客日记
剑指offer-17、树的⼦结构
2025-07-30 09:30:02基础资料围观218次
本篇文章分享剑指offer-17、树的⼦结构,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识
题⽬描述
输⼊两棵⼆叉树A , B ,判断B 是不是A 的⼦结构。(ps:我们约定空树不是任意⼀个树的⼦结构)
假如给定A 为{8,8,7,9,2,#,#,#,#,4,7} , B 为{8,9,2} , 2 个树的结构如下,可以看出B是A 的⼦结构:
思路及解答
双重递归法(标准解法)
使用两个递归函数:
isSubStructure
:遍历树A的每个节点,寻找与树B根节点值相同的节点recur
:从匹配的节点开始,递归比较两棵树的对应节点是否相同
public class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
// 空树不是任何树的子结构
if (A == null || B == null) return false;
// 三种情况满足一种即可:
// 1. B是以A为根的子结构
// 2. B是A左子树的子结构
// 3. B是A右子树的子结构
return hasSubtree(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
}
// 判断B是否是A的子结构(从当前节点开始)
private boolean hasSubtree(TreeNode A, TreeNode B) {
// B已经遍历完,说明匹配成功
if (B == null) return true;
// A遍历完但B还有节点,或节点值不匹配
if (A == null || A.val != B.val) return false;
// 递归比较左右子树
return hasSubtree(A.left, B.left) && hasSubtree(A.right, B.right);
}
}
- 时间复杂度:O(mn),m和n分别是树A和树B的节点数
- 空间复杂度:O(m),递归栈的深度最大为树A的高度
迭代+递归混合法
- 使用迭代法(栈或队列)遍历树A
- 当找到与树B根节点值相同的节点时,切换到递归比较
- 结合了迭代和递归的优点
public class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
if (A == null || B == null) return false;
Stack<TreeNode> stack = new Stack<>();
stack.push(A);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
// 找到匹配的根节点,开始递归比较
if (node.val == B.val && compareTrees(node, B)) {
return true;
}
if (node.right != null) stack.push(node.right);
if (node.left != null) stack.push(node.left);
}
return false;
}
private boolean compareTrees(TreeNode A, TreeNode B) {
if (B == null) return true;
if (A == null || A.val != B.val) return false;
return compareTrees(A.left, B.left) && compareTrees(A.right, B.right);
}
}
- 时间复杂度:O(mn)
- 空间复杂度:O(m),栈的空间消耗
文章来源:https://www.cnblogs.com/seven97-top/p/19006428
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- Arthas使用指南:安装与常用命令(trace、watch)详解
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 01
- 剑指offer-17、树的⼦结构
- HotSpot虚拟机对象探秘
- 国产化Excel处理组件Spire.XLS教程:使用 Java 将 CSV 转换为 Excel
- 剑指offer-16、合并两个有序链表
- 图表控件Aspose.Diagram教程:使用 Java 读取 Visio 形状数据
- Spring AI 框架中如何集成 MCP?
- 聚合系统设计:利用泛型来重构三方服务的底层调用
- “子弹弹夹”装弹和出弹的抽象原理实战:掌握栈的原理与实战