//删除一个节点 public Node deletevalue(Node p) { //左右都有儿子找右儿子的最左叶字节点 if(p.left!=null&p.right!=null) { Node s = successor(p); p.value=s.value; p=s; } Node replacement = p.left==null?p.right:p.left; //有左儿子或者右儿子 if(replacement!=null) { replacement.parent = p.parent; if(p.parent==null) { root =replacement; }else if(p == p.parent.left) { p.parent.left=replacement; }else { p.parent.right=replacement; } p.left=p.parent=p.right=null; if(p.color==Black) colorChange(replacement); //本身是根节点 }else if(p.parent==null) { root =null; //本身是叶字节点 }else { if(p.color==Black) { colorChange(p); } if(p==p.parent.left) p.parent.left=null; else { p.parent.right=null; } p.parent=null; } return p; }
原文:https://www.cnblogs.com/lanbingnie/p/13732693.html