red black tree的刪除節點演算法

2021-07-04 01:14:33 字數 1179 閱讀 6863

對於bst的tree_delete演算法,若被刪除節點 y 為黑色,那麼 y 的替代者 x 節點的所有path都少了乙個black-height高度。

我們假定:node x has an "extra" black. 即:將 y 的blackness "push" 到它的子節點 x 身上。因此,x 節點是「雙黑」或者「紅-黑」。

idea: move the extra black up the tree until:

x points to a red-and-black node, color x black;

x points to the root, extra black can be "removed" or

suitable rotations and recolorings

void rb_delete(pnode z)

if(y != z)

z->key = y->key;

if(y->color == 1) //若被刪除點為黑色,則需要調整x

rb_delete_fixup(x);

}void rb_delete_fixup(pnode x)

if(w->left->color == 1 && w->right->color == 1)

else

w->color = x->p->color; //w為red時,recoloring並將x->p左旋;將root賦給x,結束迴圈

x->p->color = 1;

w->right->color = 1;

pnode par = x->p;

left_rotate(par);

x = find_root(x);}}

else

if(w->left->color == 1 && w->right->color == 1)

else

w->color = x->p->color;

x->p->color = 1;

w->left->color = 1;

pnode par = x->p;

right_rotate(par);

x = find_root(x);}}

}x->color = 1; //x為「red-black」或x為root,直接將x變為黑色

}

mysql軟刪除與硬刪除 軟刪除和硬刪除的處理方法

硬刪除 硬刪除就是傳統的物理刪除,直接將該記錄從資料庫中刪除。但是是人總會犯錯誤,在誤操作刪除了重要資料後,如果想要恢復該資料,需要鎖表再去訪問日誌檔案。這樣會造成大量的人力資源浪費,現在的開發不推介這種方式。軟刪除軟刪除又叫邏輯刪除,標記刪除,與我們常說的刪除不同,並不是真的從資料庫中將這條記錄去...

mysql軟刪除與硬刪除 軟刪除和硬刪除的處理方法

硬刪除 硬刪除就是傳統的物理刪除,直接將該記錄從資料庫中刪除。但是是人總會犯錯誤,在誤操作刪除了重要資料後,如果想要恢復該資料,需要鎖表再去訪問日誌檔案。這樣會造成大量的人力資源浪費,現在的開發不推介這種方式。軟刪除軟刪除又叫邏輯刪除,標記刪除,與我們常說的刪除不同,並不是真的從資料庫中將這條記錄去...

Mybatis Plus的刪除和邏輯刪除

注 此處的 是在mybatisplus的分頁查詢上進行新增修改的 什麼是物理刪除?簡單來說,物理刪除就是我們日常中使用的delete語句,就是真真正正的從資料庫中刪除掉某條資料。簡單使用 物理刪除 test public void delete 什麼是邏輯刪除?簡單來說,邏輯刪除就是給表中新增乙個字...