Files
obsidian/АиСД/Задачи/LeetCode/Lowest Common Ancestor of a Binary Tree III.md
T
roma-dxunvrs 0e6e583e6d
deploy / Pull and Restart (push) Successful in 17s
refactor: wiki links -> md links
2026-09-22 08:52:23 +03:00

23 lines
1.1 KiB
Markdown

Leetcode #1650 | #Medium | [Деревья](../../Структуры/Деревья.md) | [BST](../../Методы/BST.md) | [Математика](../../Методы/Математика.md)
## Идея
Отличие от [Lowest Common Ancestor of a Binary Tree](Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.md) - нам не дают корень.
В чем логика. Пусть путь от p до общего предка - A, от q - B, часть от предка до null (выход за корень) - C. Когда указатель от p доходит до null мы скидываем его в q, для q делаем такое же, только скидываем до p. А теперь посчитаем пути.
a - A + C + B
b - B + C + A
Вот и все
## Big-O
- Время ```O(N)```
- Память ```O(1)```
## Код
```Java
class Solution {
public Node lowestCommonAncestor(Node p, Node q) {
Node a = p, b = q;
while (a != b) {
a = (a == null) ? q : a.parent;
b = (b == null) ? p : b.parent;
}
return a;
}
}
```