⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rb_del.m

📁 data structures C programs
💻 M
字号:
function rb=rb_del(rb,Z)
% RB_DEL
%
%  rb=rb_del(rb,Z) deletes the node Z from
%  the red-black binary tree rb.

% Copyright (c) MathWorks Inc. 1998-2001. All rights reserved.

global bt_nil rb_black rb_red

if Z==0 | Z==bt_nil
  return;
end

if (Z.left==bt_nil) | (Z.right==bt_nil)
  Y=Z;
else
  Y=Z.right;
  while Y.left~=bt_nil
    Y=Y.left;
  end
end

if Y.left~=bt_nil
  X=Y.left;
else
  X=Y.right;
end

X.parent=Y.parent;
if Y.parent==0
   rb=X;
else
  if Y==Y.parent.left
    Y.parent.left=X;
  else
    Y.parent.right=X;
  end
end

if Y~=Z
  Z.key=Y.key;
  Z.data=Y.data;
end
if Y.color==rb_black
  [rb,X]=rb_del_fixup(rb,X);
end
free(Y);

return;


function [rb,X]=rb_del_fixup(rb,X) 

global bt_nil rb_black rb_red

while (X~=rb) & (X.color==rb_black)
  if X==X.parent.left
    W=X.parent.right;
    if W.color==rb_red
      W.color=rb_black;
      X.parent.color=rb_red;
      rb=rb_rl(rb,X.parent);
      W=X.parent.right;
    end
    if (W.left.color==rb_black) & (W.right.color==rb_black)
      W.color=rb_red;
      X=X.parent;
    else
      if W.right.color==rb_black
	W.left.color=rb_black;
	W.color=rb_red;
	rb=rb_rr(rb,W);
	W=X.parent.right;
      end
      W.color=X.parent.color;
      X.parent.color=rb_black;
      W.right.color=rb_black;
      rb=rb_rl(rb,X.parent);
      X=rb;
    end
  else
    W=X.parent.left;
    if W.color==rb_red
      W.color=rb_black;
      X.parent.color=rb_red;
      rb=rb_rr(rb,X.parent);
      W=X.parent.left;
    end
    if (W.right.color==rb_black) & (W.left.color==rb_black)
      W.color=rb_red;
      X=X.parent;
    else
      if W.left.color==rb_black
	W.right.color=rb_black;
	W.color=rb_red;
	rb=rb_rl(rb,W);
	W=X.parent.left;
      end
      W.color=X.parent.color;
      X.parent.color=rb_black;
      W.left.color=rb_black;
      rb=rb_rr(rb,X.parent);
      X=rb;
    end
  end
end
X.color=rb_black;

return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -