Я нашел это решение на Leetcode, пытаясь решить эту проблему:
https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/
Кажется, все в Leetcode считают само собой разумеющимся, как это работает. Но я не понимаю. Что здесь происходит и какой алгоритм используется для нахождения LCA бинарного дерева?
public TreeNode lowestCommonAncestorBinaryTree(TreeNode root, TreeNode p, TreeNode q) {
if(root==null) {
return null;
}
if(root==p) {
return p;
}
if(root==q) {
return q;
}
TreeNode left = lowestCommonAncestorBinaryTree(root.left, p, q);
TreeNode right = lowestCommonAncestorBinaryTree(root.right, p, q);
if (left != null && right != null) {
return root;
}
if(left!=null && right==null) {
return left;
}
if(right!=null && left==null) {
return right;
}
return null;
}