大佬部落格:
這顆紅黑樹是我看了大佬部落格的原理之後的手擼版本,**實在是不夠優雅.
這裡只是留作紀念,相信等我看完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。通過對任何一條從根到葉子簡單路徑上的 顏色來約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,因而近似於平衡 由於性質中紅色節點不連續,最短路徑可為全是連續黑結點,最長路徑則由於紅節點不連續,則每間隔乙個...