treemap原始碼解析之個人小筆記

2021-09-02 12:35:57 字數 1164 閱讀 9217

新增entry時,核心函式fixafterinsertion原始碼如下:

具體圖示請分別參照 中的插入和刪除情形。

private void fixafterinsertion(entryx) else

//parent為red且parent的sibling為black,參照情形4

setcolor(parentof(x), black);

setcolor(parentof(parentof(x)), red);

rotateright(parentof(parentof(x)));

}} else else

setcolor(parentof(x), black);

setcolor(parentof(parentof(x)), red);

rotateleft(parentof(parentof(x)));}}

}root.color = black;

}刪除entry時,

private void fixafterdeletion(entryx)

if (colorof(leftof(sib)) == black &&

colorof(rightof(sib)) == black) else

//sib的右孩子為紅,和情形4對應;且上面情況必須導致這種情形。

setcolor(sib, colorof(parentof(x)));

setcolor(parentof(x), black);

setcolor(rightof(sib), black);

rotateleft(parentof(x));

x = root;

}} else

if (colorof(rightof(sib)) == black &&

colorof(leftof(sib)) == black) else

setcolor(sib, colorof(parentof(x)));

setcolor(parentof(x), black);

setcolor(leftof(sib), black);

rotateright(parentof(x));

x = root;}}

}setcolor(x, black);

}

TreeMap 紅黑樹 原始碼解析

紅黑樹是一種平衡二叉搜尋樹。它可以在o log n 的時間內完成查詢,插入和刪除。二叉搜尋樹 左邊的節點都小於父節點,右邊的節點都大於父節點。平衡二叉樹 任意左右兩個子樹的葉子節點的高度相差不超過1。關於二叉樹的分類可以看筆者的這篇文章 一句話弄懂常見二叉樹型別 分成這兩個概念來看,紅黑樹就非常好理...

TreeMap 原始碼分析

treemap底層是使用紅黑樹實現的儲存鍵值對的map容器,可以通過比較器進行排序。紅黑樹本質上是一棵弱平衡二叉樹,它的節點有紅色和黑色兩種顏色。主要特性有五點。1 每個節點或者是黑色,或者是紅色。2 根節點是黑色。3 每個葉子節點 nil 是黑色。注意 這裡葉子節點,是指為空 nil或null 的...

TreeMap原始碼分析

public v put k key,v value int cmp entryparent split comparator and comparable paths comparator cpr comparator if cpr null while t null else while t n...