二叉排序樹的時間複雜度

2021-08-18 15:38:15 字數 2029 閱讀 1344

二叉排序樹又稱二叉查詢樹,它或是一棵空的二叉樹,或是具有下列性質的二叉樹:

由上述定義可知,中虛遍歷二叉排序樹可以得到乙個按關鍵碼有序的序列。

[cpp]view plain

copy

print

?template

struct binode  

class bisorttree  

void bisorttree::insertbst(binode*root,binode*s)  

bisorttree::bisorttree(int r,int n)  

}  //在二叉排序樹中刪除乙個節點f的左孩子節點p的演算法:

//1.若節點p是葉子,則直接刪除節點p

//2.若節點p只有左子樹,則需重接p的左子樹;若節點p只有右子樹,則需重接p的右子樹

//3.若節點p的左右子樹都不為空,則

//  3.1查詢節點p的右子樹上的最左下節點s以及節點s的雙親節點par

//  3.2將節點s的資料域替換到被刪除節點p的資料域

//  3.3若節點p的右孩子無左子樹,則將s的右子樹接到par的右子樹上;否則將s的右子樹接到節點par的左子樹上

//  3.4刪除節點s;

void bisorttree::deletebst(binode*p,binode*f)  

else

if(p->rchild==null)  

else

if(p->lchild==null)  

else  

p->data=s->data;  

if(par==p)  

par->rchild=s->rchild;  

else

par->lchild=s->rchild;  

delete s;  

}  }  

binode*bisorttree::searchbst(binode*root,int k)  

templatestruct binode

class bisorttree

void bisorttree::insertbst(binode*root,binode*s)

bisorttree::bisorttree(int r,int n)

}//在二叉排序樹中刪除乙個節點f的左孩子節點p的演算法:

//1.若節點p是葉子,則直接刪除節點p

//2.若節點p只有左子樹,則需重接p的左子樹;若節點p只有右子樹,則需重接p的右子樹

//3.若節點p的左右子樹都不為空,則

// 3.1查詢節點p的右子樹上的最左下節點s以及節點s的雙親節點par

// 3.2將節點s的資料域替換到被刪除節點p的資料域

// 3.3若節點p的右孩子無左子樹,則將s的右子樹接到par的右子樹上;否則將s的右子樹接到節點par的左子樹上

// 3.4刪除節點s;

void bisorttree::deletebst(binode*p,binode*f)

else if(p->rchild==null)

else if(p->lchild==null)

else

p->data=s->data;

if(par==p)

par->rchild=s->rchild;

else

par->lchild=s->rchild;

delete s;

}}binode*bisorttree::searchbst(binode*root,int k)

給定值的比較次數等於給定值節點在二叉排序樹中的層數。如果二叉排序樹是平衡的,則n個節點的二叉排序樹的高度為log

2n+1,其查詢效率為o(log

2n),近似於折半查詢。如果二叉排序樹完全不平衡,則其深度可達到n,查詢效率為o(n),退化為順序查詢。一般的,二叉排序樹的查詢效能在o(log

2n)到o(n)之間。因此,為了獲得較好的查詢效能,就要構造一棵平衡的二叉排序樹。

b 樹查詢時間複雜度 二叉排序樹的時間複雜度

終於開始寫二叉排序樹。如果這裡有個程式,裡面有兩個程式塊,它們是先後順序。第乙個程式塊執行時間複雜度是o n 第二個程式塊執行時間複雜度也是o n 我的大腦就會覺得這個程式總的時間複雜度就是 o n o n 好像很大,好像其實比起o n 2 還是小的。因為常數係數似乎可以忽略不計。可能因為我大腦不喜...

二叉排序樹

在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...

二叉排序樹

name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...