一、什麼是二叉搜尋樹
二叉查詢樹是按照二叉樹結構來組織的,因此可以用二叉鍊錶結構表示。二叉查詢樹中的關鍵字的儲存方式滿足的特徵是:設x為二叉查詢樹中的乙個結點。如果y是x的左子樹中的乙個結點,則key[y]≤key[x]。如果y是x的右子樹中的乙個結點,則key[x]≤key[y]。根據二叉查詢樹的特徵可知,採用中根遍歷一棵二叉查詢樹,可以得到樹中關鍵字有小到大的序列。
二叉樹的查詢、最大/小、前驅和後繼的偽**: 複雜度都是 h
//二叉樹的插入和刪除 複雜度均為 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
(1)插入
插入結點的位置對應著查詢過程中查詢不成功時候的結點位置,因此需要從根結點開始查詢帶插入結點位置,找到位置後插入即可。下圖所示插入結點過程:
書中給出了插入過程的偽**:
tree_insert(t,z)(2)刪除從二叉查詢樹中刪除給定的結點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
<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...