我想从我的rbtree neighbourlist中读取所有pind,然后将它们存储在数组中。int pind只是另一个数组的索引,我想根据我的rbtree中存储的adresses更改值。
i在每个像素中都有一系列结构(像素)和rbtree。
//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]: %dn", 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)_bln", (int)n->rInd,(int)n->pInd);
else
printf("<%d>(%d)_ren", (int)n->rInd,(int)n->pInd);
if (n->left != NULL) {
print_tree_helper(n->left, indent + INDENT_STEP);
}
}
有效,而我的更改却没有?还是如何使用三个中的所有地址使其正常工作,以进一步处理这些值?
GCC给出了错误:在功能"计数"和函数中'addNodeToArray'请求成员"左"而不是结构或工会
预先感谢您。
您的代码中有太多错误。但是对于count
和AddNodeToArray
,主要问题是您与rbtree_node
和rbtree
类型混淆。rbtree_node
是带有您需要的数据的结构,但是rbtree
是一个构造的结构,只有一个成员 - 指向rbtree_node
类型的根的指针。
我无法测试您的代码以指向所有错误,至少是因为它不完整。但是我想要纠正它,您可以尝试一下。
count
应该是
int count_helper(rbtree_node node) {
int c = 1;
if (node == NULL)
return 0;
else {
c += count_helper(node->left);
c += count_helper(node->right);
return c;
}
}
int count(rbtree tree) {
if (tree == NULL)
return 0;
else {
return count_helper(tree->root);
}
}
和AddNodeToArray
类似这样的东西
int AddNodeToArray_helper(rbtree_node tree, int arr[], int i) {
if(node == NULL)
return i;
arr[i] = node->pInd;
i++;
if(node->left != NULL)
i = AddNodeToArray_helper(node->left, arr, i);
if(node->right != NULL)
i = AddNodeToArray_helper(node->right, arr, i);
return i;
}
int AddNodeToArray_helper(rbtree tree, int arr[], int i) {
return AddNodeToArray_helper(tree->root, arr, i);
}