16 lines
513 B
Ruby
16 lines
513 B
Ruby
|
# Find the lowest common ancestor in a Binary Tree.
|
||
|
# The lowest common ancestor of two nodes v and w in a tree is the lowest (i.e. deepest) node
|
||
|
# that has both v and w as descendants.
|
||
|
|
||
|
def lowest_common_ancestor(node1, node2)
|
||
|
parents = Set.new
|
||
|
parent1 = node1.parent
|
||
|
parent2 = node2.parent
|
||
|
until parents.include?(parent1) || parents.include?(parent2)
|
||
|
parents.merge [parent1, parent2]
|
||
|
parent1 = parent1.parent
|
||
|
parent2 = parent2.parent
|
||
|
end
|
||
|
parents.include? parent1 ? parent1 : parent2
|
||
|
end
|