[파이썬] 트리 알고리즘을 활용한 최소 공통 조상 (LCA) 찾기
트리 알고리즘(Tree Algorithm)은 트리 구조에서 다양한 문제를 해결하는 데 사용되는 알고리즘입니다. 이 중에서도 최소 공통 조상(Lowest Common Ancestor, LCA)을 찾는 알고리즘은 많은 문제 해결에 활용되며, 특히 그래프와 관련된 문제에서 유용합니다.
최소 공통 조상 (LCA)란?
최소 공통 조상 (LCA)은 두 개의 노드가 주어졌을 때, 두 노드의 가장 가까운 공통 상위 조상을 찾는 문제입니다. 여기서 상위 조상은 노드의 부모, 조부모, 증조부모 등을 의미합니다. LCA 문제는 트리 구조에서 각 노드의 부모 노드를 찾을 수 있다는 가정하에 해결할 수 있습니다.
LCA 알고리즘 구현하기
다음은 Python으로 LCA 알고리즘을 구현한 예시 코드입니다.
# 트리 노드 클래스 정의
class Node:
def __init__(self, key):
self.key = key
self.children = []
# LCA를 찾는 함수
def findLCA(root, node1, node2):
if root is None:
return None
if root == node1 or root == node2:
return root
lca = None
for child in root.children:
child_lca = findLCA(child, node1, node2)
if child_lca is not None:
if lca is not None:
return root
else:
lca = child_lca
return lca
# 트리 생성
root = Node(1)
node2 = Node(2)
node3 = Node(3)
node4 = Node(4)
node5 = Node(5)
node6 = Node(6)
root.children = [node2, node3, node4]
node2.children = [node5, node6]
# LCA 찾기
lca_node = findLCA(root, node5, node6)
print("LCA:", lca_node.key)
위 코드에서는 Node 클래스를 정의하고, 두 개의 노드를 입력으로 받아 최소 공통 조상을 찾는 findLCA
함수가 구현되어 있습니다. 트리를 생성한 후 findLCA
함수로 LCA를 찾을 수 있습니다.
위 예시에서는 트리 구조가 다음과 같이 구성되어 있습니다.
1
/ | \
2 3 4
/ \
5 6
이 경우, 노드 5와 6의 최소 공통 조상은 노드 2입니다. 따라서 출력 결과는 LCA: 2
가 됩니다.
마무리
트리 알고리즘을 활용한 최소 공통 조상 (LCA) 문제는 다양한 문제 해결에 사용되는 중요한 알고리즘입니다. Python을 이용하여 LCA를 구현하고 적용하는 방법을 알아보았습니다. 트리 알고리즘에 대한 이해를 통해 다양한 문제에 적용할 수 있도록 하세요!