LCR 194. 二叉树的最近公共祖先
LCR 193. 二叉搜索树的最近公共祖先 也是一样的做法
二叉树的公共祖先的定义:对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)
分类讨论:
- 当前节点为空 or 当前节点等于
p
or 当前节点等于q
,返回当前节点 - 左右子树相等,返回当前节点
- 左子树为空,右子树不为空,返回右子树,反之左子树,都为空,就返回空即可
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null || root == p || root == q) {return root;}TreeNode lnode = lowestCommonAncestor(root.left, p, q);TreeNode rnode = lowestCommonAncestor(root.right, p, q);if(lnode != null && rnode != null) {return root;}return lnode != null ? lnode : rnode;
}