插入增强红黑树

时间:2013-03-23 23:05:26

标签: algorithm tree binary-tree binary-search-tree red-black-tree

我正在查看插入增强红黑树的代码。此树有一个名为“size”的附加字段,它保持以节点x为根的子树的大小。以下是插入新节点的伪代码:

AugmentedRBT_Insert(T,x){
    BST_Insert(T,x); //insert as if it is a normal BST
    x[color]=red; //insert as a red node
    size[x]=1;
    tmp=parent[x];
    while(tmp!=NULL){   //start from the node x and follow the path to root
        size[tmp]=size[tmp]+1;  //update the size of each node
        tmp=parent[tmp];
    }
}

忘记修复着色和旋转,它们将在另一个功能中完成。我的问题是,为什么我们将新添加的节点“x”的大小设置为1?我知道它不会有任何子树,因此它的大小必须为1,但RBT的一个要求是每个红色节点都有两个黑色子节点,实际上每个叶子节点都是NULL,即使我们插入节点“x “作为黑色,它仍然应该有2个黑色NULL节点,我认为我们必须将它的大小设置为3?我错了吗?

感谢。

1 个答案:

答案 0 :(得分:1)

在大多数二叉树中,红黑树中的插入直接发生在叶子上。因此,以叶子为根的子树的大小为1.红色节点确实有两个黑孩子,因为leaves always have the "root" or "nil" as a child, which is black。那些空元素不是节点,所以我们不计算它们。

然后,我们去调整所有父母的大小直到根(他们每个人都为我们刚刚添加的节点获得+1)。

最后,如果需要,我们在旋转树以平衡它时修复这些值。在您的实现中,您可能希望在一次传递中而不是两次传递大小更新和旋转。