BST樹的查詢

2021-09-30 09:19:50 字數 2359 閱讀 4650

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...