又稱二叉排序樹 ,二叉搜尋樹:左子樹的所有節點小於根節點,右子樹均大於根節點。其中序遍歷的結果是從小到大排列的值。
bst樹的基本構造
此處不僅有左右孩子,也新增了雙親節點。使其進行某些演算法更加方便。
class
bstnode
public
bstnode
(int x,bstnode pa)
public
bstnode
(bstnode lchild,bstnode pa,bstnode rchild,
int x)
}
1.對bst樹進行中序遍歷,(不使用棧和遞迴,充分利用其雙親節點)
//用於正常中序遍歷 對其左邊進行遍歷
private bstnode first
(bstnode ptr)
return ptr;
}//遍歷完左邊之後,對右邊或者其雙親節點進行操作
private bstnode next
(bstnode ptr)
else
if(pa==head)
return pa;}}
//將first和last聯絡起來
//中序遍歷 非遞迴 非棧
public
void
niceinorder()
}
2.逆序進行中序遍歷:即輸出的結果為從大到小。與上述演算法基本相似,只需要將左孩子和右孩子進行更改即可。
//從後往前進行遍歷
private bstnode last
(bstnode ptr)
return ptr;
}private bstnode prev
(bstnode ptr )
else
if(pa==head)
return pa;}}
//逆序中序非遞迴
public
void
resniceinorder()
}
2.在bst樹裡面進行查詢值:因為bst樹比較特別,其左邊的值小於根節點,右邊的值大於根節點。則先將該值與根節點進行比較,判斷需要向左進行查詢還是向右進行查詢。當節點不為空時可一直進行查詢,直到找到。
//查詢值
public bstnode findvalue
(int val)
return p;
}
3.在bst樹裡面插入資料
//插入資料
public
boolean
insert
(int x)
bstnode pa=head;
bstnode p=head.parent;
//root
while
(p!=null&&p.data!=x)
//如果該二叉樹裡面存在該值則false
if(p!=null&&p.data==x)
return
false
;//構造結點 判斷是左孩子還是右孩子,如果是最小值或者最大值需要將head的左右孩子的指向也進行修改。
p=newbstnode
(x,pa);if
(p.data}else
} cursize++
;return
true
;}
**刪除節點:**刪除需要分幾種情況考慮。注意要將所有情況考慮到。
1.沒有頭結點,或者沒有找到該值,則較簡單直接返回false。
2刪除葉子結點
3.刪除單分支節點
4.刪除根節點
5.刪除雙分支節點
上面情況是從簡單到複雜進行操作,首先查詢到該節點的位置,然後考慮是葉子情況的話,進而討論單分支情況,後將其擴充套件到雙分支節點。如果是雙分支節點的話因為bst中序遍歷後是按照從小打到順序排列的,則可先找到該節點,然後向右一步,找到其左邊的結點,此時最左邊的結點要麼是葉子結點,要麼是單分支節點,則將該值複製給原本找到的結點,然後將指標指向最左邊的指標,剩下的就轉換為對葉子結點或者單分支節點進行操作,則簡單許多。
//刪除資料
public
boolean
remove
(int x)
//此時已成為單分支 處理單分支或者葉子結點都可
bstnode pa=p.parent;
bstnode child=p.lchild!=null?p.lchild:p.rchild;
if(child!=null)child.parent=pa;
//處理頭結點
if(pa==head)
//非頭結點
else
else
} cursize--
;return
true
;}
主函式呼叫:
public
static
void
main
(string[
] args)
;// bstnode mst=new bstnode();
for(
int i =
0; i < arr.length; i++
)// btnode.niceinorder();
btnode.
resniceinorder()
;}
b樹及其相關操作
b樹的插入 1.類似於二叉排序樹,按照關鍵字大小插入到最低層的某個非葉節點。2.如果插入後結點關鍵字輸滿足b樹階的要求 關鍵字數 b樹階 1 終止 3.如果結點上的關鍵字樹大於等於b樹的階,如對階 3的b樹,最多關鍵字數為2,此時進行了插入結點後該結點關鍵字數為3,則設三個關鍵字從大到小分別叫a,b...
bs t結構及其相關函式的定義
參考bs.h 此部分內容對應h.264標準9.1節及 2 中6.4.13小節 bs t結構描述了位元流的概念,從位元流中進行順序讀寫操作 類似於前向迭代器 typedef struct bs s bs t void bs init bs t s,void p data,int i data 使用p ...
二叉搜尋樹(BST)的相關操作
今天寫一寫二叉搜尋樹的插入,查詢,刪除的操作。首先給出節點的資料結構 struct node 第乙個是查詢操作 void search node root,int x if root data x if x data search root l,x else search root r,x 第二個插...