二叉排序樹又稱二叉查詢樹,它或是一顆空樹,或者具有下列性質的二叉樹:
首先,提供乙個二叉樹的結構
typedef struct bitnode
bitnode,*bitree;
二叉排序樹查詢的實現
//指標f指向t的雙親,其初始呼叫值為null
//若查詢成功,則指標p指向該資料元素結點,並返回true
//否則指標p指向查詢路徑上訪問的最後乙個結點並返回false
status searchbst(bitree t,int key,bitree f,bitree *p)
else if( key == t->data)
else if(key < t>data)
return searchbst(t>lchid,key,t,p)
;//在左子樹繼續查詢
else
return searchbst(t>rchid,key,t,p)
;//在右子樹繼續查詢
}
演算法分析:
searchbst函式是乙個可遞迴執行的函式,f指向t的雙親,當t指向根結點的時候,f的初值就為null。
status insertbst(bitree *t,int key)
else
return
false
;}
有了上述的插入操作,我們就可以利用其建立一顆二叉樹了
int i;
int a[10]=;
bitree t = null;
for(i=0;i<10;i++)
分為三種情況:
1、刪除的是葉子結點:直接刪除即可,對整棵樹沒有影響
2、刪除的結點只有左子樹或只有右子樹的情況:刪除結點過後將他的左子樹或右子樹整個移動到刪除結點的位置即可。
3、刪除的結點既有左子樹又有右子樹:找到要刪除結點p的直接去前驅(或直接後繼)s,用s來替換節點p,然後再刪除此節點s
**實現:
先在二叉樹中查詢到要刪除的結點
status deletebst(bitree *t,int key)
}
delete函式的實現
status delete(bitree* p)
else if((*p)->lchild = null)//左子樹空則需重接他的右子樹
else//左右子樹均不空
//q始終是s走過的上乙個結點位置
(*p)->data = s->data;
if(q != *p)
q->rchild = s->lchid;
else
q->lchid = s->lchid;
free(s);}
return ture;
}
過程分析:
資料結構 二叉排序樹
二叉排序樹是一種特殊結構的二叉樹,它作為一種表的組織手段,通常被稱為 樹表。可以作為一種排序和檢索的手段。定義 二叉排序樹或是空樹,或是具有下述性質的二叉樹 其左子樹上所有結點的資料值均小於根結點的資料值 右子樹上所有結點的資料值均大於或等於根結點的資料值。左子樹和右子樹又各是一棵二叉排序樹。對二叉...
資料結構 二叉排序樹
二叉排序樹 binarysorttree 具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右子樹也分別為二叉排序樹 include includeusing namespace std type...
資料結構 二叉排序樹
如果需要乙個滿足 支援排序性 高效插入 刪除操作 高效查詢的資料結構,怎麼做?先看看一些簡單的資料結構 1 排序順序表 陣列 查詢可以採用折半查詢演算法,時間效率為o log2n 插入 刪除操作的時間複雜度為o n 資料量大時,效率太低。2 排序單鏈表 只能採用順序查詢,時間複雜度為o n 不能採用...