プレーヤーオブジェクトを保持する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]
コメントを追加