一顆紅黑樹的實現

2022-05-17 08:44:05 字數 1556 閱讀 6058

大佬部落格:

這顆紅黑樹是我看了大佬部落格的原理之後的手擼版本,**實在是不夠優雅.

這裡只是留作紀念,相信等我看完hashmap原始碼以後一定會有不一樣的感覺吧

經過測試,這顆紅黑樹複雜度還達不到完全的log,但是數量級是一樣的.

在資料量為1e6時,log(1e6)應該是20,但是遞迴層數穩定在25左右

總的來說,差距不大

過一段時間把delete補上

package lab;

/** * @author : zgq

* @date : 2020/3/17 15:58

* @version : 1.0

*/public class redblacktreeelse

}if(root.isred)

}//返回節點不為空表示現在還需要重新調整

private nodeadd(nodepresent,integer key, v value,nodebrother,nodefather)

nodeson;

boolean flag=present.isred;

if(key>present.key)

//兒子為空表示沒有修改,不為空就賦值

//注意,我們假設以剛剛發生修改的位置作為參考

//這裡已經連續返回兩次,是爺爺了,

if(son!=null)

}else

}else

if(son!=null)

}else

}//下方沒有修改或者當前節點是黑色

if(son==null||!present.isred||!son.isred)

//修改部分看大佬部落格的原理,應該不難理解

//就是這**實在是不夠優雅

if(brother!=null&&brother.isred)

if(father.left==present)else

}elseelse}}

//查詢就是和普通的二叉樹一樣了

private v query(noderoot,integer key)if(root.key.equals(key))

if(key>root.key)else

}public v get(integer key)

static class node

public final integer getkey()

public final v getvalue()

public final string tostring()

public final v setvalue(v newvalue)

}private void viewendwithnull(noderoot)

if(root.isred)

else system.out.print(root.key+" ");

viewendwithnull(root.left);

viewendwithnull(root.right);

}public void view()

}

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...

紅黑樹實現

紅黑樹 是一棵二叉搜尋樹,它在每個節點上增加了乙個儲存位來表示節點的顏色,可以是red或black。通過對任何一條從根到葉子簡單路徑上的 顏色來約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,因而近似於平衡 由於性質中紅色節點不連續,最短路徑可為全是連續黑結點,最長路徑則由於紅節點不連續,則每間隔乙個...