我有這段代碼可以找到binary tree
中兩個nodes
的least common Ancestor
。我認爲時間複雜度是O(log n)
。但需要專家意見。這段代碼在我的輸入上工作得很好,但我不確定我是否已經詳盡地進行了測試。在Java中實現的二叉樹LCA的時間複雜度是多少
這裏是代碼
//LCA of Binary tree
public static Node LCABT(Node root, int v1, int v2){
if (root==null)
return null;
if (root.data==v1 || root.data==v2){
return root;
}
Node left = LCABT(root.left,v1,v2);
Node right = LCABT(root.right,v1,v2);
if(left!=null && right!=null)
return root;
else if (left!=null)
return left;
else return right;
}
它提到了你提到的角落案例,你怎麼認爲它沒有? –
@ user1988876好吧,如果在樹的左邊部分有'v1',而'v2'根本不在樹中,那麼無論是否存在'v2',都會返回'v1'。有人可能會爭辯說,在這種情況下,它也應該返回'null'。如果兩個節點都不包含在樹中,那麼你返回'null',這是正確的 - 我會更新我的答案。 –
這是正確的。這意味着在我調用這個方法之前我需要檢查這些是否存在,或者我有辦法在這裏處理它嗎? –