在二叉樹中找到兩個節點的最近公共祖先 I

2021-10-22 14:35:16 字數 907 閱讀 9021

給定一棵二叉樹的頭節點 head,以及這棵樹中的兩個節點 o1 和 o2,請返回 o1 和 o2 的最 近公共祖先節點。

說明: o1和o2要麼同時都在二叉樹上,要麼同時都不在二叉樹上。

後序遍歷二叉樹,假設遍歷到的當前節點為 cur。因為是後序遍歷,所以 先處理 cur 的兩棵子樹。

假設處理 cur 左子樹時返回節點為 left,處理右子樹時返回節點為 right。

class

node

:def

__init___

(self, data)

: self.value = data

self.right =

none

self.left =

none

deflowestcommonancestor

(head: node, o1: node, o2: node)

:if head is

none

or head == o1 or head == o2:

return head

left = lowestcommonancestor(head.left, o1, o2)

right = lowestcommonancestor(head.right, o1, o2)

if left is

notnone

and right is

notnone

:return head

return left if left is

notnone

else right

在二叉樹中找到兩個節點的最近公共祖先 高階

在二叉樹中找到兩個節點的最近公共祖先 高階 給定一棵二叉樹,多次給出這棵樹上的兩個節點 o1 和 o2,請對於每次詢問,找到 o1 和 o2 的最近公共祖先節點。輸入描述 第一行輸入兩個整數 n 和 root,n 表示二叉樹的總節點個數,root 表示二叉樹的根節點。以下 n 行每行三個整數 fa,...

在二叉樹中找到兩個節點的最近公共祖先 再高階

在二叉樹中找到兩個節點的最近公共祖先 再高階 給定一棵二叉樹,多次給出這棵樹上的兩個節點 o1 和 o2,請對於每次詢問,找到 o1 和 o2 的最近公共祖先節點。輸入描述 第一行輸入兩個整數 n 和 root,n 表示二叉樹的總節點個數,root 表示二叉樹的根節點。以下 n 行每行三個整數 fa...

演算法實現 在二叉樹中找到兩個節點的最近公共祖先

該題目來自一次面試。在二叉樹中找到兩個節點的最近公共祖先 高階 給定一棵二叉樹,多次給出這棵樹上的兩個節點 o1 和 o2,請對於每次詢問,找到 o1 和 o2 的最近公共祖先節點。輸入描述 第一行輸入兩個整數 n 和 root,n 表示二叉樹的總節點個數,root 表示二叉樹的根節點。以下 n 行...