二叉树的最近公共祖先

已关闭
dadingPython / C++入场费 3 金币0 次提交

题目描述

给定一棵二叉树和树中两个节点 p 和 q 的值,找到这两个节点的最近公共祖先(LCA)。

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

二叉树节点值唯一且为正整数。

输入格式

第一行 n 表示二叉树节点数。第二行 n 个整数表示层序遍历结果(-1 表示空节点)。第三行两个整数 p 和 q。

输出格式

一个整数,表示最近公共祖先的节点值。保证 p 和 q 一定存在于树中。

输入输出样例

样例 1

输入:

7
3 5 1 6 2 0 8
5 1

输出:

3

样例 2

输入:

7
3 5 1 6 2 0 8
5 4

输出:

5

说明/提示

可以用递归后序遍历,自底向上查找;也可以用哈希表记录每个节点的父节点,然后类似求链表交点。