(4 3)樹與二叉樹之二叉排序樹的變形

2021-10-03 04:16:30 字數 2941 閱讀 5903

當二叉排序樹中不存在關鍵字等於 e.key 的資料元素時,插入元素值為 e 的結點,並返回 true; 

否則,不進行插入並返回false

typedef struct bitreenode

bitreenode,

*bitree;

status insert bst(bitree &t, elemtype e)

else

return false;

}

(1)被刪除的結點是葉子結點,核心:其雙親結點中相應指標域的值改為「空」刪除節點20:

從根節點開始,查詢到20這個節點,讓他的雙親節點由f指標指向,釋放點20這個節點,同時修改30節點的左指標域為空。

(2)被刪除的結點只有左子樹或者只有右子樹,核心:其雙親結點的相應指標域的值改為 「指向被刪除結點的左子樹或右子樹」。

p指向待刪除節點,f指向雙親節點,

刪除掉40節點後,應該讓子樹重新連線到40節點的雙親節點30的右子樹域,這樣就完成了節點40的刪除

(3)被刪除的結點既有左子樹,也有右子樹:核心是:以其前驅替代之,然後再刪除該前驅結點

因為中序遍歷後會得到有序序列,50的前驅節點是40,讓前驅節點40去替換50,然後將前驅節點進行刪除,將其子樹

進行重連

具體演算法描述如下:

typedef struct bitreenode

bitreenode,

*bitree;

status deletebst(bitree &t, keytype key)

else

if(key

>data.key)

deletebst ( t-

>lchild, key );/

* 繼續在左子樹中進行查詢*

/else

deletebst ( t-

>rchild, key );/

*繼續在右子樹中進行查詢*/}

}/* deletebst*

/其中刪除操作過程如下所描述:

void dele(bitree &p)

else

if(!p-

>lchid)

/*只有右子樹*

/else

/*左右子樹均有*

/}

的描述如下:

左邊情況的**為:

q=p;

p=p-

>lchild;

f->lchild=p;

free(q)

;左邊情況的**為:

/* 左子樹為空樹只需重接它的右子樹*/的描述如下:

左邊情況的**為:

q=p;

p=p-

>rchild;

f->lchild=p;

free(q)

;左邊情況的**為:

/* 左右子樹均不空*/的描述如下:

q = p; s = p-

>lchild;

//待刪除節點的前驅節點的定位操作

while

(s->rchild)

p->data = s-

>data;

//讓前驅節點覆蓋當前被刪除節點

//重連操作

if(q != p )///

* 重接*q的左子樹*

/ q-

>rchild = s-

>lchild;

else

q->lchild = s-

>lchild;

free(s)

;//s的內容已複製到p上,即p實際上已變成s*

/

//待刪除節點的前驅節點的定位操作的解釋如下:

p節點是待刪除節點,讓s節點指向其左孩子,讓while迴圈不停的找右孩子,直到找到s節點,其雙親節點用q指向,

經過若干步之後,s節點就沒有右子樹了,若他還有右子樹的話,他就不會是p節點的前驅節點(按照中序遍歷的思想去想)

//重連操作的解釋如下:

按照上述的解釋q!=p,所以可以直接進行重連操作;

若只有左子樹,不存在右子樹的話,s位置只能是如下圖所示的位置,此時p和q同時指向被刪除節點

二叉樹,完全二叉樹,滿二叉樹,二叉排序樹

二叉樹 二叉樹是每個節點最多有兩個子樹的樹結構 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。完全二叉樹 除最後一層外,每一層上的結點數均達到最大值 在最後一層上只缺少右邊的若干結點 樹中所含的n個節點和滿二叉樹中編號...

樹與二叉樹的應用 二叉排序樹

1 二叉排序樹的定義 二叉排序樹 簡稱 bst 也稱為 二叉查詢樹 二叉查詢樹或者是一棵空樹,或者是一棵具有下列 特性的非空二叉樹 a.若左子樹非空,則左子樹上所有結點關鍵字值均小於根結點的關鍵字值 b.若右子樹非空,則右子樹上所有結點關鍵子值均大於根結點的關鍵字值 c.左 右子樹本身也分別是一棵二...

二叉樹(四) 二叉排序樹

二叉排序樹或者非空二叉樹,或者為具有以下性質的二叉樹 1 若根結點的左子樹不空,則左子樹上所有結點的值都小於根結點的值 2 若根結點的右子樹不空,則右子樹上所有結點的值都大於或者等於根結點的值 每一棵子樹分別也是二叉排序樹。上述定義為遞迴定義 如下圖 該二叉樹的中序序列如下 10,30,35,38,...