- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二三树 (2-3 Trees)
二三樹 (2-3 Trees) 二技晶片四甲林宥鈞 何謂2-3 Tree 若不是空集合,則要符合下列的定義。 2-3 Tree中的節點可以存放一筆或兩筆資料。 若節點中存放了一筆資料Ldata,其必須存在兩個子點節-左子節點與中子節點。 2-3 Tree定義 左子節點所存放的資料鍵值必須小於Ldata.key。 中子節點所存放的資料鍵值必須大於Ldata.key。 2-3 Tree 存放了兩筆資料Ldata與Rdata (1) Ldata Rdata (2)左子節點所存放的資料必須小於Ldata (3)中子節點所存放的資料必須大Ldata, 小於Rdata (4)右子節點所存放的資料必須大於Rdata 2-3 Tree定義 樹中的所有樹葉節點必須為同一階(Level)。 2-3 Tree的加入 從2-3 Tree的開始搜尋,假使加入的資料其鍵值在2-3 Tree中找不到,則加入2-3 Tree中。 假設加入的節點, 該節點只有一筆資料,則直接加入; 該節點已存在兩筆資料,加入後不符合2-3 tree的定義,因此必須將此節點資料一分為二,分別放入最大鍵值和最小鍵值並將中間的鍵值,往上放到父節點。 2-3 Tree的加入 該節點的父節點也已有二筆資料。 2-3 Tree的加入 繼續加入90 然後將85加入,因為85介於80和90之間。 2-3 Tree的加入 繼續加入55加入c節點 2-3 Tree的加入 並將70加入其父節點a 2-3 Tree的加入 繼續加入15 2-3 Tree的加入 2-3 Tree的加入 繼續加入25 2-3 Tree的加入 繼續加入17 2-3 Tree的加入 2-3 Tree的加入 2-3 Tree的刪除 Tree的刪除分成兩部份: 一為刪除的鍵值是在樹葉節點上 二為刪除的鍵值是在非樹葉節點 2-3 Tree的刪除 若刪除的鍵值是在樹葉節點上 今欲刪除左圖中節點f的鍵值70 2-3 Tree的刪除 2-3 Tree的刪除 假設我們要刪除的是圖中節點g的鍵值85, 此時不可直接刪除就結束(why?) 我們必需向左或右兄弟節點借一個鍵值。 若我們向右邊的節點h借,則需借一個最小的鍵值95(為什麼?),取代刪除的85,並將95往上提到c節點上。最後結果如下圖所示: 2-3 Tree的刪除 2-3 Tree的刪除 若繼續刪除90,左兄弟節點借一個最大值75,往上提至父節點,並將父節點的80(因為它介於75和90之間)取代90 2-3 Tree的刪除 2-3 Tree的刪除 繼續刪除80的話,則因為它的左右兄弟節點皆無一個以上的鍵值,此時必需挑左或右兄弟與其父節點的某一鍵值合併 2-3 Tree的刪除 2-3 Tree的刪除 刪除的鍵值在非樹葉節點上 若此時欲刪除下圖中a節點的鍵值60.則可以找此節點之右子樹中最小的鍵值來取代,或找左子樹中最大的鍵值來取代之,若以右子樹中最小的鍵值來取代的話,則f節點的70將取代60,如右下圖所示。 2-3 Tree的刪除 2-3 Tree的刪除 繼續再刪除70鍵值,找右子樹中最小的鍵值 75 來取代之,並進行前述的處理, 2-3 Tree的刪除 繼續再刪除90,找右子樹中最小的鍵值 95 來取代之 2-3 Tree的刪除 2-3 Tree的刪除 若繼續再刪75,若以右子樹中80取代的話後,情形如下圖示: 2-3 Tree的刪除 2-3 Tree的刪除 2-3 Tree的刪除 2-3 Tree結論 資料也常有搜尋的需求,tree才是常見的搜尋結構。 tree可以用陣列來表示,也可以用鏈結串列來表示。 寫程式的人可選擇效率比較好的方式來實作,一旦完成了資料結構的實作,未來若是有演算法需要用到該種資料結構,就可以直接使用,不必再寫程式。 謝謝指教 80 50 35 b c d e h 15 a ? 85,96 刪除80的樹葉節點一般,隨機的挑選以右子樹的最小值或左子樹的最大值交換的應用。 右圖不符合2-3 tree的定義,因為有一節點沒有鍵值故需再調整之,方法如下圖所示: 10,15 80 50 35 b c d e h a ? 85,96 刪除80的樹葉節點一般,隨機的挑選以右子樹的最小值或左子樹的最大值交換的應用。 右圖不符合2-3 tree的定義,因為有一節點沒有鍵值故需再調整之,方法如下圖所示: 10,15 左圖不符合2-3 tree的定義,因為有一節點沒有鍵值故需再調整之,方法一: 如右圖所示: 50 85,96 10,15 35,80 50 35 15 10 96 85 80 方法二:若以左子樹中的50取代的話,
文档评论(0)