以下は、バイナリ検索ツリーの最小共通祖先の実装です。2 つの質問があります。
1) 時間の複雑さは O(n) であり、空間の複雑さは O(n) の最悪のケースですが、BST のバランスがとれている場合、時間と空間の両方の平均的なケースは O(logn) です。あれは正しいですか?2) バイナリ検索ツリーだけでなく、バイナリ ツリーにソリューションを拡張するにはどうすればよいですか。
ご連絡をお待ちしております。
//The function findOrQueue is to enqueue all elements upto target node to a queue
public void findOrQueue(Node target, Node top, LLQueue q) {
int cmp = target.getData().compareTo(top.getData());
if(cmp == 0) {
q.enqueue(top);
return ;
}
else if (cmp < 0) {
q.enqueue(top);
findOrQueue(target, top.getLeftChild(),q);
}
else {
q.enqueue(top);
findOrQueue(target, top.getRightChild(),q);
}
}
public Node LCA(Node n1, Node n2) throws QueueEmptyException {
LLQueue q1 = new LLQueue();
LLQueue q2 = new LLQueue();
findOrQueue(n1,getRoot(),q1);
findOrQueue(n2,getRoot(),q2);
Node t = null;
while (!q1.isEmpty() && !q2.isEmpty()) {
Node t1 = (Node)q1.dequeue();
Node t2 = (Node)q2.dequeue();
if(t1.getData() != t2.getData()) {
return t;
}
else t = t1;
}
if(q1.isEmpty() && q2.isEmpty())
return null;
else
return t;
}