首页 > 其他 > 详细

红黑树删除方法

时间:2020-09-25 22:06:26      阅读:46      评论:0      收藏:0      [点我收藏+]
    //删除一个节点
        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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!