我有一種方法來查找二進制搜索樹(BST)中的下一個中序繼任者。 「inorderSuccessor」方法將BST的任何節點作爲輸入並輸出下一個中間繼承者。方法和樹類的定義如下:時間使用中繼方法打印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的最小節點。當我編寫一種方法持續調用「inorderSuccessor」來打印BST的所有節點時,總時間複雜度是多少?我認爲這是O(n * h)。那是對的嗎?
打印BST中的所有節點?那不是'O(* BST *中的節點數量)'嗎?無論他們是按順序,先後順序還是其他順序枚舉? –
@AlexBollbach有一些打印方式不能在線性時間內運行,比如做一個DFS打印深度爲0的所有節點,然後是深度爲1的所有節點等等,所以它不是全部不合理的問題。 – templatetypedef
雖然這個問題指定了序列的使用。 –