Re: [理工] [資結]2-3 Tree的 delete

看板Grad-ProbAsk作者 (ubuntu123)時間13年前 (2011/01/18 21:25), 編輯推噓3(3012)
留言15則, 4人參與, 最新討論串2/4 (看更多)
※ 引述《tomcallme (今天早上)》之銘言: 這題是依序:11,12,...,19 in ascending order 建2-3tree 然後 delete node14 吧? 剛剛參考了一下手邊的資料 ~ 洪逸的筆記 2-3tree的delete的確可以有兩種方法 1.從左子樹的MAX來補 2.從右子樹的MIN來補 : 14 : / \ : 12 16,18 : /\ / | \ : 11 13 15 17 19 : 刪除 14 : / \ 因為是刪除non-leaf : 12 16,18 選擇取左子樹最大去遞補 : / \ / | \ : 11 13 15 17 19 : 13 : / \ : 12 16,18 子點keys數小於1 又不能做rotation : / \ / | \ 故做combination 並斷連結 : 11 空 15 17 19 ************************************************************** : 13 : / \ : 空 16,18 父點keys小於1 還是不能做rotation : / | \ 故combine 並斷建結 : 11,12 15 17 19 ************************************************************** 修改過後的想法: 13 / \ 12 16,18 / \ / \ \ 11 空 15 17 19 將左子樹MAX(13)移至root 此時原先(13)的節點 key = 0 不符合2-3tree定義 所以將其左兄弟(11)與其父親(12)combination 此時: 13 / \ 空 16,18 / / \ \ 11,12 15 17 19 這時候原先(12)的節點 key = 0 因為右兄弟有兩個鍵值(16,18) 所以向右兄弟借一個鍵值(rotation)就是13下、16上 並且調整右子樹的子鏈結~這又是另一個故事了XD 如有錯誤請高手指證^^ : 13,16,18 root keys數目大於2 -> split : 11,12 15 17 19 : 16 : / \ : 13 18 將斷掉的接回 : / \ / \ : 11,12 15 17 19 : 應該是這樣吧 剛剛講錯了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.105.207.212 ※ 編輯: ubuntu123 來自: 112.105.207.212 (01/18 21:27)

01/18 21:43, , 1F
想請問 你的右子樹斷建的時機是啥時?
01/18 21:43, 1F

01/18 21:43, , 2F
是第一次做combination的時候嗎?
01/18 21:43, 2F

01/18 21:56, , 3F
我想法幾乎跟你一樣 唯獨在*號框起來那邊有點出入
01/18 21:56, 3F

01/18 21:58, , 4F
至於斷鍵時機點 我的想法就是因為出現underflow
01/18 21:58, 4F

01/18 21:59, , 5F
我的想法:因為出現underflow 所以不能rotate
01/18 21:59, 5F

01/18 21:59, , 6F
所以只能combine combine完斷建 等一切整好再接
01/18 21:59, 6F

01/18 22:00, , 7F
所以必須作rotation處理 下一個step若不斷鍵重組
01/18 22:00, 7F

01/18 22:00, , 8F
我手邊沒資料XD 不過斷建應該是combine的配套吧~?
01/18 22:00, 8F

01/18 22:00, , 9F
就會違背search tree的定義
01/18 22:00, 9F

01/18 22:01, , 10F
更改一下 因為rotate會出現underflow 所以不能rotate
01/18 22:01, 10F

01/18 22:01, , 11F
阿~~明天去查書 = =
01/18 22:01, 11F

01/18 22:04, , 12F
我想的跟T大一樣
01/18 22:04, 12F

01/18 22:05, , 13F
我一直打錯 是overflow 不是 underflow
01/18 22:05, 13F
※ 編輯: ubuntu123 來自: 112.105.207.212 (01/18 22:29)

01/18 22:30, , 14F
修改過了 不知道有沒有比較合理一點@@?
01/18 22:30, 14F
※ 編輯: ubuntu123 來自: 112.105.207.212 (01/18 22:32)

09/11 14:09, , 15F
就會違背search https://daxiv.com
09/11 14:09, 15F
文章代碼(AID): #1DDPJLE4 (Grad-ProbAsk)
文章代碼(AID): #1DDPJLE4 (Grad-ProbAsk)