私は、バイナリ検索ツリー(BST)内で次のinorder successorを見つける方法を持っています。 「inorderSuccessor」メソッドは、BSTの任意のノードを入力として受け取り、次のinorder後続を出力します。方法ツリークラスは、以下のように定義される:時間inorder後継メソッドを使用したBSTの印刷の複雑さ
class BSTInorderSuccessor{
public static Node inorderSuccessor(Node node) {
if (node.right != null) {
return minValue(node.right);
}
Node parent = node.parent;
while (parent != null && node == parent.right){
node = parent;
parent = parent.parent;
}
return parent;
}
}
class TreeNode{
int data;
Node left;
Node right;
Node parent;
public TreeNode(int data){
this.data = data;
this.left = null;
this.right = null;
this.parent = null;
}
}
は、BSTの高さをhとし、このツリー構造内のn個のノードがあります。私は "inorderSuccessor"メソッドの時間の複雑さはO(h)であることを知っています。
私の質問は次のとおりです。BSTの最小ノードが指定されています。 BSTのすべてのノードを印刷するために「inorderSuccessor」を継続的に呼び出すメソッドを記述すると、合計時間の複雑さはどのくらいですか?私はそれがO(n * h)だと思います。あれは正しいですか?
BSTのすべてのノードを印刷しますか?それは 'O(* BST *のノード数)'ではありませんか?それらがinorder、preorder、または何らかの順序で列挙されているかどうか? –
@AlexBollbach深度0のすべてのノードを印刷するためにDFSを実行した後、深さ1のノードをすべて印刷するなど、線形時間に実行されないすべてのものを印刷する(愚かな)方法があります。不合理な質問。 – templatetypedef
質問はinorderシーケンスの使用を指定します。 –