CodeACM
HOT 100 · 二叉树 · LC 236

二叉树的最近公共祖先:ACM 模式刷题

按标准输入读取测试数据,输出结果后可在 CodeACM 在线运行和提交。

题目描述

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

输入格式

第一行输入层序序列记号数 n 以及整数 p、q。

第二行输入包含整数和 null 的层序序列。

输出格式

输出节点 p 和 q 的最近公共祖先节点值。

数据范围

  • 2 ≤ 节点数 ≤ 10⁵
  • 所有节点值互不相同
  • p 和 q 对应节点一定存在且不同

公开样例

样例 1

输入

11 5 1
3 5 1 6 2 0 8 null null 7 4

输出

3

节点 5 和 1 分别位于根节点 3 的两侧。

样例 2

输入

11 5 4
3 5 1 6 2 0 8 null null 7 4

输出

5

节点 5 是节点 4 的祖先。

练习建议

先根据输入输出格式写出可运行程序,再用公开样例检查结果;遇到边界情况时,补充自测用例后提交。