前往
大廳
主題

LeetCode - 236. Lowest Common Ancestor of a Binary Tree 解題心得

Not In My Back Yard | 2021-10-22 00:00:06 | 巴幣 0 | 人氣 493

題目連結:


題目意譯:
給定一個二元樹,找到給定的兩個樹中之節點的最低共同祖先(Lowest Common Ancestor,LCA)。

根據 LCA 於維基百科之定義:「最低共同祖先定義於兩節點 p 和 q 上,而有一最低節點 T 其有著 p 和 q 同作為其後代(這邊我們允許一個節點可為自己本身的後代)」。

限制:
樹中的節點數介於範圍 [2, 10 ^ 5] 中。
-10 ^ 9 <= Node.val <= 10 ^ 9
所有 Node.val 皆相異。
p != q
p 和 q 皆會存在於樹中。



範例測資:
Example 1:
輸入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
輸出: 3
解釋: 節點 5 和 1 的 LCA 為 3。

Example 2:
輸入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
輸出: 5
解釋: 節點 5 和 4 的 LCA 為 5,因為根據 LCA 的定義一個節點可以是自身的後代。

Example 3:
輸入: root = [1,2], p = 1, q = 2
輸出: 1


解題思維:
在深度優先搜尋(Depth First Search,DFS)尋找 p 和 q 的過程中便可以順便求得 p 和 q 的 LCA:
假設目前的節點為 Q。

當左右子樹各有著目標節點(p 或 q)時,代表 p 和 q 各自分散在 Q 的左右子樹中。因此根據 LCA 的定義,此時 Q 即是 p 和 q 的 LCA;

如果左右子樹並不是兩者皆有目標節點。但有其中一者含有目標節點,且 Q 為目標節點之一時,因為節點可以為自身的後代,所以 Q 即為 LCA。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作