二分探索木のノード数を数えようとしていますが、最も効率的な手段は何だろうと考えていました。これらは私が見つけたオプションです:
int カウントを BST クラスに格納する
その下の子の数を格納するツリーの各ノードに int の子を格納します
BST のノード数をカウントするメソッドを作成する
オプション 3 を使用する場合は、次のように書きました。
int InOrder {
Node *cur = root;
int count = 0;
Stack *s = null;
bool done = false;
while(!done) {
if(cur != NULL) {
s.push(cur);
cur = cur->left;
}
else {
if(!s.IsEmpty()) {
cur = s.pop();
count++;
cur = cur->right;
}
else {
done = true;
}
}
}
return count;
}
cur = cur->left;
しかし、それを見ると、との間の無限ループに陥りそうです。cur = cur->right;
では、どのオプションが最も効率的で、それがオプション 3 である場合、この方法は機能しますか?