请编写程序,实现 Tarjan 算法,以求解最近公共祖先问题。
输入格式:
输入首先给出一个正整数 n(3≤n≤2001),随后一行给出二叉树的 n 个前序序列的结点序列号(从 1 开始),空结点对应符号 #
。
随后一行给出正整数 m(≤1000),接下来 m 行,每行给出待查询的一对结点的序列号。
输出格式:
对每一对待查询的结点,按下列格式输出其最近公共祖先:
LCA(i, j) = k
其中 i
和 j
依次为输出的结点序列号,k
为它们最近公共祖先的序列号。
输入样例:
15
1 2 3 4 # # 5 # # 6 # # 7 # #
3
4 5
5 6
3 7
输出样例:
LCA(4, 5) = 3
LCA(5, 6) = 2
LCA(3, 7) = 1