紅黑樹,平衡二叉樹

1. 什麼是紅黑樹?

紅黑樹是一種自平衡的二叉查找樹:

  • 節點要麼是黑色,要麼是紅色。
  • 根節點爲黑色。
  • 葉子節點都是黑色的空節點。(葉子節點不存儲數據)
  • 紅色節點的左右孩子都是黑色。保證了從根節點到葉子節點不會出現連續兩個紅色節點。
  • 從任意節點到它每個葉子節點的所有路徑,都包含相同數量的黑色節點。保證了沒有一條路徑會比其他路徑長出兩倍。
  • 時間複雜度爲 logn ,含n個節點的紅黑樹高度最多爲 2log(n+1) 。

紅黑樹的左右旋:
  左旋就是將這個旋轉節點作爲他右孩子的左孩子,原本他右孩子的左孩子作爲這個旋轉節點的右孩子 右旋就是將旋轉節點作爲他左孩子的右孩子,原本他左孩子的右孩子作爲這個旋轉節點的左孩子左旋右旋代碼

紅黑樹的應用
  • HashMap(1.8)
  • TreeMap
  • IO多路複用 epoll 的實現採用紅黑樹組織管理的 sockfd,以支持快速的增刪改查;

2. 平衡二叉樹(AVL樹)

  • 左右兩子樹高度差的絕對值不超過1,通過左右旋來維持平衡。
  • 左右子樹也都是平衡二叉樹。
  • 平衡二叉樹一定是二叉搜索樹,反之則不一定。
  • 適合用於插入與刪除次數比較少,但查找多的情況。
  • 時間複雜度爲 logn。

3. 紅黑樹與平衡二叉樹的區別?

  • 平衡二叉樹要求兩子樹高度差的絕對值不超過1,對平衡要求的比較苛刻,所以需要複雜的左右旋操作來不斷的維持平衡;紅黑樹降低了對平衡的要求,從而提高了性能。
  • 如果搜索的次數遠大於插入、刪除的次數,可以選擇AVL樹;如果搜索、插入和刪除的次數幾乎差不多,可以選擇紅黑樹。
  • 如果數據頻繁的進行插入、刪除操作,使用平衡二叉樹的代價就有些高了。而只是做了近似平衡的紅黑樹,它的插入、刪除操作的性能都比較穩定,對於工程應用來說,會面對各種異常的情況,所以會更傾向於性能穩定的紅黑樹。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章