2010-04-26 17 views
2

我有一個rb-trees的問題。根據維基百科,rb-tree需要遵循以下內容:爲什麼RB-Tree不能成爲一個列表?

  1. 節點是紅色或黑色。
  2. 根部是黑色的。 (這條規則在一些定義,而不是別人使用。因爲根總是可以從紅色變成黑色,但並不一定反之亦然這個規則對分析影響不大。)
  3. 所有的葉子都是黑色的。
  4. 每個紅色節點的兩個孩子都是黑色的。
  5. 從給定節點到任何其後代的葉子每一個簡單路徑都包含相同數目的黑色節點。

正如我們所知,rb-tree需要平衡並且具有O(log(n))的高度。 但是,如果我們插入一個越來越一系列數字(1,2,3,4,5 ...),並在理論上,我們將得到一個樹看起來像一個名單,將有O(n)的高度與所有它的節點是黑色的,這與上面提到的rb-tree屬性不矛盾。那麼,我錯在哪裏?

謝謝。

+1

爲一個很好的問題本的後代的算法考試:-) – 2010-04-26 12:18:52

回答

3

你的例子與屬性號碼5矛盾,所以它不是一個有效的紅黑樹。

我們的樹是:

b(1, nil, b(2, nil, b(3, nil, b(4, nil, b(5, nil, nil))))) 

所以獲得了最後兩個葉(節點5的孩子),我們要參觀五個黑節點(每個b表示),去下節點4葉我們必須訪問四個黑節點等這意味着,有簡單路徑從根到一些含不同數量的黑色節點,其中無效屬性5.

+0

屬性#5對其任何後代葉子說 - 這棵樹只有*一葉*。 – 2010-04-26 12:31:26

+0

@Neil沒有,樹葉是「零」的節點,所以它有6 – fortran 2010-04-26 12:35:48

+0

@fortran在我的書,並在我讀過的每一個數據結構的書,葉子是沒有孩子的節點。 – 2010-04-26 12:37:05

3

甲在the article位進一步向下:

插入通過添加 多達二叉搜索樹插入 確實和由着色它紅的節點開始。

+0

@Neil,新插入的紅色節點可能會重新繪製算法運行期間nto黑色。所以它的顏色並不重要。 – 2010-04-26 12:33:50

相關問題