剑指offer面试题26:树的子结构(golang实现)

该博客讨论了如何使用Golang解决LeetCode上的剑指Offer面试题26,即判断一棵树B是否是另一棵树A的子结构。博主通过广度优先搜索遍历A树,寻找与B根节点值相等的节点,并递归检查以该节点为根的子树是否包含B树。文章提供了算法分析和Golang代码实现。
摘要由CSDN通过智能技术生成

题目描述

输入两棵二叉树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]		//	AB为深度优先表示的完全二叉树
输出:false

示例2

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

Leetcode链接:剑指offer面试题26:树的子结构

算法分析

  • 要确定B树是否为A树的子结构,要先确定B的根节点是否被包含在A树内,因此可以考虑用广度优先搜索遍历A树的每一个节点,判断当前节点curNode的值是否等于B树的根节点,若值相等,则用isAContainsB()函数判断以curNode为根节点的树是否包含B树; 若值不相等,则直接跳过,继续遍历A树的节点。
  • isAContainsB()函数用递归实现,需要注意对AB判空。
  • 设A的节点数为m,B的节点数为n,则总的时间复杂度为遍历A树的时间乘上isAContainsB()函数花费的时间,即O( m ∗ n m*n m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值