二叉树的最近公共祖先
已关闭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
说明/提示
可以用递归后序遍历,自底向上查找;也可以用哈希表记录每个节点的父节点,然后类似求链表交点。