我想讀取我的rbtree neighbourList中的所有pInd,並將它們存儲在數組中。 int pInd只是另一個數組的索引,我想根據我的rbtree中存儲的地址更改值。C傳遞結構的rbtree成員的指針以供進一步處理
我有一個數組結構(像素)和rbtree內每個像素持有neigbours的地址。
//File rbtree.h
typedef struct rbtree_node_t {
int rInd;
int pInd;
struct rbtree_node_t* left;
struct rbtree_node_t* right;
struct rbtree_node_t* parent;
enum rbtree_node_color color;
} *rbtree_node;
typedef struct rbtree_t {
rbtree_node root;
} *rbtree;
//File rbtree.c
rbtree rbtree_create() {
rbtree t = malloc(sizeof(struct rbtree_t));
t->root = NULL;
verify_properties(t);
return t;
}
// ----------------------------------------
//File main.c
typedef struct _Pixel
{
int mean;
rbtree neighbourList;
int index;
}Pixel;
void init(Pixel* p)
{
...
r[index].neighbourList = rbtree_create();
...
}
//----------------------------------------
void changepixel(Pixel* p,int index)
{
int *arr=NULL;
int i;
int size;
rbtree npl = r[index].neigbourList;
size = count(npl);
arr = calloc(size, sizeof(int));
AddNodeToArray(npl, arr, 0);
for (i=0; i<size; i++)
{
printf("arr[%d]: %d\n", i, arr[i]);
}
}
int AddNodeToArray(rbtree node, int arr[],int i);
{
if(node == NULL)
return i;
arr[i] = node->pInd;
i++;
if(node->left != NULL)
i = AddNodeToArray(node->left, arr, i);
if(node->right != NULL)
i = AddNodeToArray(node->right, arr, i);
return i;
}
int count(rbtree* node)
{
int c = 1;
if (node == NULL)
return 0;
else
{
c += count(node->left);
c += count(node->right);
return c;
}
}
//------------------------------
Pixel *p;
p = malloc((nx*ny)*sizeof(struct _Pixel));
Pixel p = r[10];
print_tree(p.npList);
changepixel(p,p.label);
有人能解釋我爲什麼打印樹
void print_tree_helper(rbtree_node n, int indent);
void print_tree(rbtree t) {
print_tree_helper(t->root, 0);
puts("");
}
void print_tree_helper(rbtree_node n, int indent) {
int i;
if (n == NULL) {
fputs("<empty tree>", stdout);
return;
}
if (n->right != NULL) {
print_tree_helper(n->right, indent + INDENT_STEP);
}
for(i=0; i<indent; i++)
fputs(" ", stdout);
if (n->color == BLACK)
printf("%d(%d)_bl\n", (int)n->rInd,(int)n->pInd);
else
printf("<%d>(%d)_re\n", (int)n->rInd,(int)n->pInd);
if (n->left != NULL) {
print_tree_helper(n->left, indent + INDENT_STEP);
}
}
作品,而我的變化doesen't?或者如何使用三個中找到的所有地址來進一步處理這些值?
GCC給出了錯誤: 函數「計數」和功能「AddNodeToArray」 請求成員的東西「左」不是一個結構或聯合
預先感謝您。
是的,你是對的。我剛剛在你的回答之前就發現了它。謝謝。 – tadata817