if(root == null || root == p || root == q) return root;
currentroot node
がnullの場合、現在の sub_tree には p と q が存在しcommon ancestor
ないため、戻りますnull root==null
およびpまたはqが等しい場合root
。私はp=rootと仮定し、ここでqに関しては、それは p または p のどちらかですが、どちらの offspring
場合でもpのnot offspring
sub_treeをたどる必要はありません。前者の場合pがqの祖先である場合はppを返すだけです==root 、それ以外の場合はpを直接返します。この場合pはありませんが、エラーは発生しません。ステートメント
については後で説明します。ancestor of q
if(left != null && right != null) return root;
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
1. p と q はすべてroot.leftoffspring
のものです
2. p と q はすべてoffspring
root.right のものです
3.これら 2 つのノードの 1 つはoffspring
root.left のもので、もう1 つはoffspring
root.rightのものです
これらの 2 つrecursive statement
はcommon ancestor
、p と q ( 1,2 の場合)
を検索するために使用されます。そうでない場合は、 pとq ( 3 の場合)を検索するために使用されます。
if(left != null && right != null) return root;
このステートメントは 3 の処理に使用されcorresponding result
、pと q は root に存在するため、rootleft_subtree and right_suntree
も存在します。ancestor
return left != null ? left : right;
このステートメントは、 1,2、
p、およびqcorresponding result
の処理に使用され、左または右に同じ sub_tree が存在します。