leetcode-236 二叉树的最近公共祖先

题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

代码实现

遍历实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
//1. 为空直接返回
if (root == null) {
return null;
}
//2. 等于其中一个节点则返回
if (root == p || root == q) {
return root;
}
//3. 处理左子树
TreeNode left = lowestCommonAncestor(root.left, p, q);
//4. 处理右子树
TreeNode right = lowestCommonAncestor(root.right, p, q);
//5. 处理结果
if (left != null && right != null) {
return root;
}
return left == null ? right : left;
}
}