题目描述
给定一棵二叉树和两个不同的节点,求出他们到最近的公共祖先父节点的路径。已知该二叉树有n个节点,标号1..n。(n<100)
输入
输入:
第一行两个整数x,y,表示需要求的节点;
以下若干行,每行两个整数a和b,表示a的父节点是b。
输出
X到y的路径。
样例输入
样例输出
给定一棵二叉树和两个不同的节点,求出他们到最近的公共祖先父节点的路径。已知该二叉树有n个节点,标号1..n。(n<100)
输入
输入:
第一行两个整数x,y,表示需要求的节点;
以下若干行,每行两个整数a和b,表示a的父节点是b。
输出
X到y的路径。
样例输入
9 7 2 1 3 2 4 2 5 3 8 5 9 5 6 4 7 4
样例输出
9 5 3 2 4 7
program x26886;
const maxn=100;
var father,a,b:array[1..maxn] of integer;
x,y,root:integer;
procedure init;
var a,b:integer;
begin
readln(x,y);
while not eof do
begin
readln(a,b);
father[a]:=b;
end;
end;
procedure findroot;
var i,j:integer;
begin
i:=x;
while i<>0 do
begin
a[i]:=1;
i:=father[i];
end;
j:=y;
while a[j]<>1 do
j:=father[j];
root:=j;
end;
procedure finda(i:integer);
begin
if i<>root then
begin
write(i,' ');
finda(father[i]);
end;
end;
procedure findb(i:integer);
begin
if i<>root then
begin
findb(father[i]);
write(i,' ');
end;
end;
begin
init;
findroot;
finda(x);
write(root,' ');
findb(y);
end.