2014-04-08 63 views
0

如何正確初始化C中的紅黑樹?紅黑樹 - 初始化

結構:

typedef struct Node{ 
    int key; 
    struct Node *left; 
    struct Node *right; 
    struct Node *parent; 

    enum {RED, BLACK} color; 
}node; 

typedef struct RBtree{ 
    struct Node *root; 
    struct Node *nil; 
}rbtree; 

主要功能:

int main(){ 
    rbtree *tree; 
    init_rbtree(&tree); 
} 

初始化函數:

void init_rbtree(rbtree **t){ 
    (*t)->root = NULL; 

    node *n = (node*)malloc(sizeof(node)); 
    if(n != NULL){ 
     n->color = BLACK; 
     (*t)->nil = n; 
    } 
} 

程序,只要我運行此代碼崩潰。

回答

1

在使用之前,您需要爲*t分配內存。

void init_rbtree(rbtree **t) { 
    *t=malloc(sizeof(rbtree)); 

    if (*t==NULL) { 
     //handle error 
    } 
    else { 
     (*t)->root = NULL; 

     node *n = malloc(sizeof(node)); 
     if(n != NULL){ 
      n->color = BLACK; 
      (*t)->nil = n; 
     } 
    } 
}