bst樹的查詢
1 查詢思想
首先將給定的k值與二叉排序樹的根結點的關鍵字進行比較:若相等: 則查詢成功;
① 給定的k值小於bst的根結點的關鍵字:繼續在該結點的左子樹上進行查詢;
② 給定的k值大於bst的根結點的關鍵字:繼續在該結點的右子樹上進行查詢。
2 演算法實現
⑴ 遞迴演算法
bstnode *bst_serach(bstnode *t , keytype key)
if (t==null) return(null) ;
else
if (eq(t->key, key) ) return(t) ;
else if ( lt(key, t->key) )
return(bst_serach(t->lchild, key)) ;
else return(bst_serach(t->rchild, key)) ;
⑵ 非遞迴演算法
bstnode *bst_serach(bstnode *t , keytype key)
bstnode p=t ;
while (p!=null&& !eq(p->key, key) )
if ( lt(key, p->key) ) p=p->lchild ;
else p=p->rchild ;
if (eq(p->key, key) ) return(p) ;
else return(null) ;
在隨機情況下,二叉排序樹的平均查詢長度asl和㏒(n)(樹的深度)是等數量級的。
bst樹的插入
在bst樹中插入乙個新結點,要保證插入後仍滿足bst的性質。
1 插入思想
在bst樹中插入乙個新結點x時,若bst樹為空,則令新結點x為插入後bst樹的根結點;否則,將結點x的關鍵字與根結點t的關鍵字進行比較:
① 若相等: 不需要插入;
② 若x.keykey:結點x插入到t的左子樹中;
③ 若x.key>t->key:結點x插入到t的右子樹中。
2 演算法實現
⑴ 遞迴演算法
void insert_bst (bstnode *t , keytype key)
bstnode *x ;
x=(bstnode *)malloc(sizeof(bstnode)) ;
x->key=key; x->lchild=x->rchild=null ;
if (t==null) t=x ;
else
if (eq(t->key, x->key) ) return ;/* 已有結點 */
else if (lt(x->key, t->key) )
insert_bst(t->lchild, key) ;
else insert_bst(t->rchild, key) ; }
⑵ 非遞迴演算法
void insert_bst (bstnode *t , keytype key)
bstnode *x, *p , *q ;
x=(bstnode *)malloc(sizeof(bstnode)) ;
x->key=key;
x->lchild=x->rchild=null ;
if (t==null) t=x ;
else
p=t ;
while (p!=null)
if (eq(p->key, x->key) ) return ;
q=p ; /*q作為p的父結點 */
if (lt(x->key, p->key) ) p=p->lchild ;
else p=p->rchild ;
if (lt(x->key, q->key) ) q->lchild=x ;
else q->rchild=x ;
由結論知,對於乙個無序序列可以通過構造一棵bst樹而變成乙個有序序列。
由演算法知,每次插入的新結點都是bst樹的葉子結點,即在插入時不必移動其它結點,僅需修改某個結點的指標。
利用bst樹的插入操作,可以從空樹開始逐個插入每個結點,從而建立一棵bst樹,演算法如下:
#define endkey 65535
bstnode *create_bst()
keytype key ;
bstnode *t=null ;
scanf(「%d」, &key) ;
while (key!=endkey)
insert_bst(t, key) ;
scanf(「%d」, &key) ;
return(t) ;
二插查詢樹(BST)
二插查詢樹是這樣一種二叉樹結構,它的每乙個結點包含乙個key和它附帶的資料,對每乙個結點v 所有的key小於v都被儲存在v的左子樹 所有key大於v的都存在v的右子樹 class bstnode object def init self,key,value,left none right none ...
二叉查詢樹(BST) 樹
目錄1,定義 二叉查詢樹 binary search tree 又名二叉搜尋樹或二叉排序樹。可以是一顆空樹,或者是具有下列性質的二叉樹 1 若它的左子樹不空,則左子樹上所有結點的指均小於它的根結點的值 2 若它的右子樹不空,則右子樹上所有結點的指均大於它的根結點的值 2,c 實現二叉樹的基本操作 i...
二分查詢樹(BST)
這個出現頻率比較高,為了防止忘了,寫一下好了 二分查詢樹的性質 來自維基百科 若任意節點的左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 任意節點的左 右子樹也分別為二叉查詢樹。沒有鍵值相等的節點 英語 no dupli...