Python 中二叉樹的最近公共祖先
假設我們有一個二叉樹。我們需要找到兩個給定節點的最近公共祖先節點。兩個節點 p 和 q 的 LCA 實際上是樹中最低的節點,這兩個節點都是其後代。因此,如果二叉樹類似於 [3,5,1,6,2,0,8,null,null,7,4]。樹將如下所示:

這裡 5 和 1 的 LCA 是 3
為了解決這個問題,我們將遵循以下步驟:
- 如果樹為空,則返回 null
- 如果 p 和 q 都與根節點相同,則返回根節點
- left := 使用 p 和 q 的根節點的左子樹的 LCA
- right := 使用 p 和 q 的根節點的右子樹的 LCA
- 如果 left 和 right 都非零,則返回根節點
- 返回 left 或 right
讓我們看看下面的實現以獲得更好的理解:
示例
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree class Solution(object): def lowestCommonAncestor(self, root, p, q): if not root: return None if root.data == p or root.data ==q: return root left = self.lowestCommonAncestor(root.left, p, q) right = self.lowestCommonAncestor(root.right, p, q) if right and left: return root return right or left ob1 = Solution() tree = make_tree([3,5,1,6,2,0,8,None,None,7,4]) print(ob1.lowestCommonAncestor(tree, 5, 1).data)
輸入
[3,5,1,6,2,0,8,null,null,7,4] 5 1
輸出
3
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP