LeetCode 236 二叉樹的最近公共祖先

2022-06-22 05:00:15 字數 1992 閱讀 1518

給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。

例如,給定如下二叉樹: root = [3,5,1,6,2,0,8,null,null,7,4]

示例 1:

輸入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1

輸出: 3

解釋: 節點 5 和節點 1 的最近公共祖先是節點 3。

示例 2:

輸入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4

輸出: 5

解釋: 節點 5 和節點 4 的最近公共祖先是節點 5。因為根據定義最近公共祖先節點可以為節點本身。

說明:路徑比較法

首先,分別找到從根結點到這兩個結點的路徑;然後,遍歷這兩條路徑,只要是相等的結點就是他們的公共祖先,找到最後乙個相等的結點就是他們的最近公共祖先。

在這裡我們用模擬棧來進行路徑尋找。

class solution(object):

def lowestcommonancestor(self, root, p, q):

""":type root: treenode

:type p: treenode

:type q: treenode

:rtype: treenode

"""s1 =

s2 =

self.getpathfromroot(root, p, s1)

self.getpathfromroot(root, q, s2)

commonparent = none

while len(s1) != 0 and len(s2) != 0 and s1[len(s1)-1] == s2[len(s2)-1]:

commonparent = s1[len(s1)-1]

s1.pop()

s2.pop()

return commonparent

def getpathfromroot(self, root, node, s):

if root is none:

return false

if root == node:

return true

if self.getpathfromroot(root.left, node, s) or self.getpathfromroot(root.right, node, s):

return true

return false

遞迴法

首先,如果 root 是 p 或 q 其中的乙個,那麼 root 就是最近公共祖先。否則,在 root 的左子樹中查詢 p 和 q ,如果不在,則公共祖先在 root 的右子樹中,反之亦然。

class solution(object):

def lowestcommonancestor(self, root, p, q):

""":type root: treenode

:type p: treenode

:type q: treenode

:rtype: treenode

"""if root is none:

return

if root == q or root == p:

return root

left = self.lowestcommonancestor(root.left, p, q)

right = self.lowestcommonancestor(root.right, p, q)

if left is none:

return right

elif right is none:

return left

else:

return root

LeetCode236 二叉樹最近祖先

思考 這個函式就是查詢p,q兩個節點的祖先,然後給了這棵樹的root,1 它先進行判斷,根節點是不是null 或者根節點是否是p q,要是有乙個是,那祖先就肯定是root 2 它用了遞迴的思想去查詢左右兩個子樹,因為pq的祖先要麼在左邊,要麼就在右邊,所以肯定能找到乙個祖先。3 若找到的left 子...

LeetCode 236 二叉樹最近公共祖先

leetcode 236 二叉樹最近公共祖先 236.二叉樹的最近公共祖先 題目描述 給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。解體思路 分兩部分解決 第一部分 實現判斷兩個結點包含於某根節點的子樹內 第二部分 先序遍歷二叉樹,如果根節點的子樹包含qp目標結點 傳入左孩子,進行遞迴。傳入...

leetcode 236 二叉樹最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 示例 1 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 ...