贝壳找房 · 树 · 算法编程题
贝壳找房 时限 1 秒 / 256 MB

题目描述

牛牛有一棵二叉树,其根节点为 root 。牛牛想要在该二叉树中找到两棵子树,他们是同构的,且这两棵子树的大小是最大的。子树的大小为其节点个数。两棵树是同构表示为该两棵树结构是相同的。如
o o
/ /
o o o o
/ /
o o
两棵树是同构的。
o o
/ /
o o o o
/
o o
是不同构的。
现在牛牛给你这棵二叉树,请你返回两棵最大同构子树的大小。

样例共 2 组

样例 1 · 该树为 o / o o / / o o 其中最大的两棵同构子树为 o o / / o o 大小为 2 。
输入
{1,1,1,1,#,1,#}
输出
2
样例 2 · 两个叶子节点所表示的子树是同构的,所以大小为 1 。
输入
{1,1,1}
输出
1

算法解析依据一般

考点:树

限制 1 秒 / 256MB | 核心代码模式(实现给定函数)

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:树

树结构上的遍历(DFS 求子树信息 / BFS 求层序),多数树题是「后序遍历 + 回溯」。

思路框架(树 通法 · 非本题专属)

  1. 按输入建图(父子关系一般给父节点编号,孩子用邻接表存)。
  2. 确定遍历方式:自底向上合并子树信息(后序 DFS)或自顶向下传参(前序 DFS)。
  3. 对每个节点,用孩子的答案合并出当前节点的答案。
  4. 涉及层间操作(如层序变换)时用 BFS 逐层处理。

实现要点:递归深度可能到 1e5,注意递归爆栈;必要时改迭代或调整递归深度。

复杂度:时间 O(n) | 空间 O(n)

该范式的通法易错点

  • 递归深度过大导致爆栈。
  • 建树时父子关系方向搞反(把树当成有向图但遍历方向错)。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 {1,1,1,1,#,1,#} → 输出 2

该树为

o

/

o o

/ /

o o

其中最大的两棵同构子树为

o o

/ /

o o

大小为 2 。

样例 2:输入 {1,1,1} → 输出 1

两个叶子节点所表示的子树是同构的,所以大小为 1 。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2024年秋招-贝壳找房-Java工程师-第一批笔试;2024年秋招-贝壳找房-C++工程师-第一批笔试;2024年秋招-贝壳找房-机器学习/数据挖掘工程师-第一批笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解