演算法導論 第三部分 基本資料結構 二叉搜尋樹

2022-03-07 23:29:30 字數 2782 閱讀 3521

一、什麼是二叉搜尋樹

二叉查詢樹是按照二叉樹結構來組織的,因此可以用二叉鍊錶結構表示。二叉查詢樹中的關鍵字的儲存方式滿足的特徵是:設x為二叉查詢樹中的乙個結點。如果y是x的左子樹中的乙個結點,則key[y]≤key[x]。如果y是x的右子樹中的乙個結點,則key[x]≤key[y]。根據二叉查詢樹的特徵可知,採用中根遍歷一棵二叉查詢樹,可以得到樹中關鍵字有小到大的序列。

二叉樹的查詢、最大/小、前驅和後繼的偽**: 複雜度都是 h

//

search 遞迴版

tree_search(x,k)

if x=null or k=key[x]

then

returnx

if(k

then

return

tree_search(left[x],k)

else

then

return

tree_search(right[x],k)

//search 迭代版

iterative_tree_search(x,k)

while x!=null and k!=key[x]

doif k

then x=left[x]

else

then x=right[x]

returnx//

最小指tree_minmum(x)

while left[x] !=null

do x=left[x]

returnx//

最大值tree_maxmum(x)

while right[x] !=null

do x=right[x]

returnx//

後繼tree_processor(x)

//右孩子非空,返回右子樹的最小值

if right[x] !=null

then

return

tree_minmum(right(x))

//右孩子為空,向上找後繼

y=parent[x]

while y!= null and x ==right[y]

do x =y

y=parent[y]

return y

二叉樹的插入和刪除 複雜度均為 h插入和刪除會引起二叉查詢表示的動態集合的變化,難點在在插入和刪除的過程中要保持二叉查詢樹的性質。插入過程相當來說要簡單一些,刪除結點比較複雜。

(1)插入

插入結點的位置對應著查詢過程中查詢不成功時候的結點位置,因此需要從根結點開始查詢帶插入結點位置,找到位置後插入即可。下圖所示插入結點過程:

書中給出了插入過程的偽**:

tree_insert(t,z)

y =null;

x =root[t]

while x !=null

do y =x

if key[z]

then x=left[x]

else x=right[x]

parent[z] =y

if y=null

then root[t] =z

else

if key[z]>key[y]

then keft[y] =z

else right[y] =z

(2)刪除從二叉查詢樹中刪除給定的結點z,分三種情況討論:

<1>結點z沒有左右子樹,則修改其父節點p[z],使其為null。刪除過程如下圖所示:

<2>如果結點z只有乙個子樹(左子樹或者右子樹),通過在其子結點與父節點建立一條鏈來刪除z。刪除過程如下圖所示:

<3>如果z有兩個子女,則先刪除z的後繼y(y沒有左孩子),在用y的內容來替代z的內容。

書中給出了刪除過程的偽**:

tree_delete(t,z)

if left[z] ==null or right[z] ==null

then y=z

else y=tree_successor(z)

if left[y] !=null

then x=left[y]

else x=right[y]

if x!=null

then parent[x] =parent[y]

if p[y] ==null

then root[t] =x

else

if y =left[[prarnt[y]]

then left[parent[y]] =x

else right[parent[y]] =x

if y!=z

then key[z] =key[y]

copy y

's data into z

return y

劇本第三部分

第三部分劇本 場景一 女生宿舍,a趴在桌子上睡覺,電腦螢幕亮著,是vs 但是就寫了一行 小碼趴在a的胳膊上睡著。突然,a醒了,發現自己上課要遲到了,a 哎呀,完了完了,大中午的怎麼趴在這睡著了 邊說話邊收拾書包 轉頭看向小碼 a 把你放哪呢 說話的時候四周環視 算了,跟我去吧,我先把你放書包裡 說話...

第三部分 效能

索引管理 效能優化 效能監控 db.c1.find explain 查詢的詳細資訊列出來 db.c1.getindexkyes 所有索引的字段 db.c1.getindexes 所有索引的相關資訊 2 唯一索引 只需要在ensureindex命令中提定 uniqure true 即可建立唯一索引,如...

sqlalchemy第三部分

1.復用。在我們用sqlalchemy運算元據庫時,有部分 可以重複使用,我們將這部分放到乙個模組中,後面使用就可以呼叫這個模組,匯入裡面的方法。python 1.連線資料庫 from sqlalchemy import create engine hostname 127.0.0.1 ip位址 p...