Lowest Common Ancestor (With Parent Pointers)

Given two nodes with parent pointers, find their lowest common ancestor.

1def lca(node1: TreeNode, node2: TreeNode) -> TreeNode:
2 def depth(node: TreeNode) -> int:
3 d = 0
4 while node:
5 node = node.parent
6 d += 1
7 return d
8 d1, d2 = depth(node1), depth(node2)
9 while d1 > d2:
10 node1 = node1.parent
11 d1 -= 1
12 while d2 > d1:
13 node2 = node2.parent
14 d2 -= 1
15 while node1 != node2:
16 node1 = node1.parent
17 node2 = node2.parent
18 return node1
3
0
5
1
1
2
node1
6
3
2
4
0
5
node2
8
6
tree=[3, 5, 1, 6, 2, 0, 8]
Step 1 / 3
Step 1:
Compute depths and lift the deeper node to align depths.
Pointers: node1=3, node2=6
Focus: select @ [3, 6]