二分木が与えられた場合、ツリー内の指定された2つのノードの最も近い共通の祖先を見つけます。
Baidu百科事典での最も近い共通祖先の定義は次のとおりです。「ルートツリーTの2つのノードpとqの場合、最も近い共通祖先はノードxとして表されるため、xはpとqの祖先であり、 xは可能な限り大きくなります(ノードはそれ自体の祖先になることもできます)。 "
たとえば、次のバイナリツリーがあるとします。root= [3,5,1,6,2,0,8、null、null、7、 4]
左(右)サブツリーがない場合は、最初に見つかった右(左)サブツリーに戻ります。
左右のサブツリーが見つかった場合、ルートノードが直接返されます
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null||root==p||root==q){
return root;
}
TreeNode ps =lowestCommonAncestor(root.left,p,q);
TreeNode qs =lowestCommonAncestor(root.right,p,q);
if(ps==null){
return qs;
}
if(qs==null){
return ps;
}
return root;
}
}