簡體   English   中英

在樹中創建節點

[英]Creating nodes in a tree

我在使用此代碼時遇到問題:

#include<stdlib.h>
#include<stdio.h>

struct quadtree
   {
   char colour;
   int x_coordinate;
   int y_coordinate;
   int size;
   struct quadtree *NW, *NE, *SE, *SW, *p;
   };

static struct quadtree *p = NULL;

int size;
int i;
int pixels;
int width;
int black_pixels;

void insert(struct quadtree **p , char colour , int size , int x_coordinate , int y_coordinate)
{    
     struct quadtree *new;
     new = (struct quadtree *) malloc ( sizeof(struct quadtree) );
     new->NW = new->NE = new->SE = new->SW = NULL;
     new->colour = colour;
     new->size = size;
     new->x_coordinate = x_coordinate;    
     new->y_coordinate = y_coordinate;
     *p = new;
    /* printf("%c\n" , p->colour); */
     printf("%c\n" , new->colour);
     return;
}


void colour_test(int x[] , int y[] , int size , int x_coordinate , int y_coordinate , struct quadtree *p)
{ 
   pixels = 0;
   for (i = 0 ; i < black_pixels ; i++)
      if (x[i] >= x_coordinate && x[i] < (size + x_coordinate) && y[i] <= y_coordinate && y[i] > (y_coordinate - size))
         pixels++;

   if (pixels == 0) 
      {
      insert(&p , 'W' , size , x_coordinate , y_coordinate);
    /* printf("Node has coordinates (%d,%d) and a size of %d\n" , x_coordinate , y_coordinate , size); */
      }
   else if (pixels == size*size) 
      {
      insert(&p , 'B' , size , x_coordinate , y_coordinate);   
   /*   printf("Node has coordinates (%d,%d) and a size of %d\n" , x_coordinate , y_coordinate , size); */
      }
   else
      { 
      insert(&p , 'G' , size , x_coordinate , y_coordinate);
   /*   printf("Node has coordinates (%d,%d) and a size of %d\n" , x_coordinate , y_coordinate , size); */
      colour_test(x , y , size/2 , x_coordinate , (y_coordinate - (size/2)) , p->NW); 
      colour_test(x , y , size/2 , (x_coordinate + (size/2)) , (y_coordinate - (size/2)) , p->NE); 
      colour_test(x , y , size/2 , (x_coordinate + (size/2)) , y_coordinate , p->SE); 
      colour_test(x , y , size/2 , x_coordinate , y_coordinate , p->SW); 
      }
}

int main()
   { 
   scanf("%d" , &width);
   scanf("%d" , &black_pixels);

   int x[black_pixels];
   int y[black_pixels];
   for (i = 0 ; i < black_pixels ; i++)
      scanf("%d%*[ ]%d" , &x[i] , &y[i]);
/*
   printf("Image width = %d\n" , width );
   printf("Total black pixels = %d\n" , black_pixels);
   for (i = 0 ; i < black_pixels ; i++)
      printf("%d %d\n" , x[i] , y[i]);
*/
   size = width;
   colour_test(x , y , size , width - size , (width - 1) , p);  

   return 0;
   }

它幾乎按預期工作,以相同顏色的象限處理圖像。 但是我在樹中創建節點時遇到了麻煩。 我試圖創建一個指向新節點的指針,然后用數據加載該新節點,然后將新節點加入其父節點。

完成此操作后,我嘗試打印出該節點,但收到一條錯誤消息,提示

要求成員在非結構或聯合體中使用“顏色”

但是當我刪除該行時,我可以在新節點中正常打印數據。 如何確保該節點實際上已加入樹中? 我是否需要創建結構變體才能做到這一點:我之前有一段代碼可用於二叉樹,並且我一直在嘗試從中進行修改。

在第一行中將p聲明為指向指針的指針,但是在嘗試在下面的行中打印時,您將其用作指針。

struct quadtree **p
printf("%c\n" , p->colour);

您需要取消引用p才能將其用作指針並提取colour

另外,您可能想看看添加一個printTree()函數,該函數可以遍歷樹並打印每個節點。 這可能有助於調試和可視化您的樹。

這是因為您的代碼中有一個雙指針,為了使該行正常工作,必須將其取消引用: printf("%c\\n" , p->colour);

也就是說,例如:

printf("%c\n" , (*p)->colour);

另外,請注意,您還有一個全局靜態變量,也稱為pstatic struct quadtree *p = NULL; 您可以更改全局變量的名稱以避免歧義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM