インオーダートラバーサルがそれ自体を2回再帰的に呼び出す場合、AVLツリーはどのようにしてO(log n)の複雑さを持つことができますか?それでO(2 ^ n)になりませんか?

JaseinCyber​​Space

プレーヤーオブジェクトを保持するAVLツリーがあります。各プレイヤーには名前とランクがあります。ツリーノードは、プレーヤーのランクに基づいて並べ替えられます。最初にツリーの深さをトラバースし、ランク順に並べられたプレーヤーのリストに各ノードを追加します(降順、つまり右から左へのトラバース)。

私が読んだすべてのことから、AVLツリーの複雑さはO(log n)であることがわかりますが、順序付きトラバーサル関数を見ると、それ自体が2回再帰的に呼び出され、O(2 ^ n)になると思いました。 。私が知らないツリーをトラバースするためのより効率的な方法はありますか?または、大きなOの計算が間違っていますか?

def traverseRightToLeft(node, array = []):
# Base case
if node is None:
    return
# Recursively check if there are any right child nodes, append the current node data to the list then recursively check if there are any left child nodes
else:
    traverseRightToLeft(node.right, array)
    array.append(node.data)
    traverseRightToLeft(node.left, array)
return array
エロイ・ペレス・トーレス

nをツリー内のノードの数として定義します。

検索挿入消去などの操作O(log n)はAVLツリーにあります。

ツリーのトラバースはO(n)、AVLツリー、Bツリー、赤黒木のいずれであっても、すべてのノードで1回だけ再帰するため(親ノードの呼び出しまたはルートへの最初の呼び出し)です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ