簡體   English   中英

B+ 樹是否有可能從其葉節點中刪除一個數字,但不會從內部節點中刪除?

[英]Is it possible that B+ Tree will delete a number from its leaf node, but not from internal node?

我有一個任務,我必須在 B+ 樹中添加和刪除操作。 我意識到有一些數字存在於非葉節點中,但不存在於葉節點中。 我立即問我的助教“B+ 樹如何包含其任何葉節點中都不存在的元素?”。 他的回答是“我想象不存在於葉節點中但存在於非葉節點中的數字是已刪除的元素。”

可能嗎? 當我們刪除它時,我們不是從 B+ 樹中刪除每個出現的元素嗎?

如果可能的話,你能舉一個發生這種情況的插入和刪除序列的例子嗎?

B+-trees 可以用不同的方式來實現關於非葉子節點上使用的鍵。

這些鍵的目的是支持查找,即唯一的約束是每個非葉節點上的鍵定義的間隔與后代葉節點上找到的實際鍵一致。

將在葉子節點找到的密鑰重用為非葉子節點的密鑰是一種可能的做法並且很方便,因為它避免了任意“組成”非葉子密鑰,但這不是 B+-樹的要求。 特別是在刪除葉子鍵或節點時,更新所有祖先非葉子鍵會造成不必要的開銷,不這樣做效率更高。

另一種可能的做法是使用葉鍵的前綴,在精神上類似於(但不一樣) try

你得到的答案是正確的。 這是一個階數(最大分支因子)為 4 的 B+ 樹的示例:

在此處輸入圖像描述

要知道樹包含哪些鍵,只需查看底層並按照(可選)鏈接從一個節點到下一個節點:1,2,3,4,5,6,7

非葉子節點中的 3 和 5 不作為數據,而是作為分隔符。 他們表明:

  • 最左邊葉子中的值小於 3
  • 中間葉子中的值大於等於 3,小於 5
  • 最右邊葉子中的值大於或等於 5。

當只發生插入時,這些分隔符將匹配出現在底層的鍵,但是當鍵被刪除時,這可能會改變。

例如,如果我們刪除鍵 5,所涉及的葉節點只會將其移出,無需更新:

在此處輸入圖像描述

上面的項目符號列表中的約束仍然是正確的,這就是最重要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM