紅黑樹的紅色內結點問題

2021-07-07 09:09:17 字數 1420 閱讀 4997

#include "iostream"

#include "cmath"

#include "fstream"

#include "algorithm"

using

namespace

std;

/*red(i, j, 0)表示結點數為i,黑高度為j,紅色根結點的紅黑樹中紅色結點最大值

red(i, j, 1)表示結點數為i,黑高度為j,黑色根結點的紅黑樹中紅色結點最大值

r1 = max

r2 = max

r3 = max

r4 = max

0 <=k <= i/2

red(i,j,k) = r1+1 k=0

=max k=1

紅結點最小值計算類似

*/const

int max = 5000; //最大結點數

const

int log = 23; //最大黑高度

int red[max+1][log+1][2];

//計算以2為底的對數

int ilog(int x)

//計算非負數的和

int isum(int x, int y)

void init()

//計算含有n個結點的紅黑樹中,計算紅色內結點個數最大值max

void dynamax(int n)

if(imax >= 0)

red[i][j][0] = imax + 1;

imax = -1;

for(k=0; k<=i/2; k++) //red(i,j,1) = max

if(imax >= 0)

red[i][j][1] = imax; }}

}//計算含有n個結點的紅黑樹中,計算紅色內結點個數最小值min

void dynamin(int n)

if(imin < i+1)

red[i][j][0] = imin + 1;

imin = i+1;

for(k=0; k<=i/2; k++) //red(i,j,1) = min

if(imin < i+1)

red[i][j][1] = imin;

}}//計算整體最小值

int rmin(int i)

return imin;

}//計算整體最大值

int rmax(int i)

return imax;

}//執行動態規劃演算法

紅黑樹下 紅黑樹的實現

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

紅黑樹下 紅黑樹的實現

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

紅黑樹筆記 紅黑樹的插入操作

紅黑樹的插入操作可以在o logn 的時間內完成。開始插入節點的時候和二叉查詢樹一樣,只需要最後將插入的節點著成紅色,為了保證紅黑樹的性質,需要通過rb insertfixup函式來調整該節點,對其重新著色並旋轉。下面先呼叫rb insert 函式將乙個節點插入到紅黑樹中,同樣先上偽 rb inse...