236. 二叉樹的最近公共祖先
給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個節點 p、q,最近公共祖先表示為一個節點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節點也可以是它自己的祖先)。
有一種淡淡的死感,二叉樹遞歸反正是越刷越絕望,完完全全的門外漢背題。
官方答案也看不懂,而且寫得一般。
在看到一個好的解答,圖畫得很好,大概理解每一步是怎么返回了
https://zhuanlan.zhihu.com/p/269251274
但是他是寫的C/C++版本,我根據這個思路改成Java。大概是這樣的
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null || root == p || root == q) {return root;}root.left = lowestCommonAncestor(root.left, p, q);root.right = lowestCommonAncestor(root.right, p, q);if (root.left != null && root.right != null) {return root;}return root.left == null ? root.right : root.left;}
}