(1)以红黑树作为underlying data structure,在树的每个节点增加一个int域储存该节点的subtree节点个数(包含自身)
node_size(x) = node_size(left[x]) + node_size(right[x]) + 1;
设nil节点的node_size返回0;
typedef struct node{
int key; int color; //Augment field: the number of all nodes in the subtree of current node, including its self
struct node *left; struct node *right; struct node *p;
int node_size();
}*pnode, node;
node sentinel = {0,1,NULL,NULL,NULL}; //初始化列表赋值,initializer_list
pnode nil= &sentinel;
int node::node_size(){
if(this != nil)
return left->node_size()+right->node_size()+1;
else
return 0;
}
测试:
void test_RBtree(){
vector<int> A = {7,3,18,10,22,8,11,26};