BST樹及其相關操作

2021-10-23 01:49:15 字數 2816 閱讀 7781

又稱二叉排序樹 ,二叉搜尋樹:左子樹的所有節點小於根節點,右子樹均大於根節點。其中序遍歷的結果是從小到大排列的值。

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 第二個插...