#LAISIR23. 題目名稱:族譜之源
題目名稱:族譜之源
📝 題目描述:
在一個古老的部族中,長老們用一棵二元樹記錄了族人的血緣關係。每個節點代表一名族人,其左子節點與右子節點為其直系子女。現在長老們想查找兩位族人的最近共同祖先(Lowest Common Ancestor,簡稱 LCA),也就是在這棵族譜樹中離他們最近的共同祖先。
你的任務是根據族譜的樹結構與兩位族人的姓名,輸出他們的最近共同祖先姓名。
📥 輸入格式:
輸入為多行格式:
-
第一行一個整數
n
(1 ≤ n ≤ 10⁴),表示節點總數(每人唯一)。 -
接下來
n
行,每行包含三個字串:parent left right
parent
:父節點的名字left
:左子節點名字,若無為"null"
right
:右子節點名字,若無為"null"
接下來一行包含兩個字串 a b
,表示要查詢的兩位族人名字。
📤 輸出格式:
- 輸出一行,為
a
和b
的最近共同祖先的名字。
📊 數據範圍:
- 所有節點名稱為僅含英文字母的非空字串,長度不超過 20。
- 保證
n
個節點構成一棵合法的有根二元樹。 a
和b
一定存在於樹中。- 名字不重複。
📘 輸入範例:
7
A B C
B D E
C F G
D null null
E null null
F null null
G null null
D G
📗 輸出範例:
A
💡 範例說明:
樹的結構如下:
A
/ \
B C
/ \ / \
D E F G
D 和 G 的最近共同祖先是 A。
Related
In following homework: