給定一棵二叉樹的頭節點 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 行...