如何用C语言显示组合四叉树?
How to display composed quadtrees using C language?
目前正在尝试用C语言实现不同的函数来实现对四叉树的运算
上下文:
一个四叉树(黑白图片)是:
- 白色
- 黑色
- 分为4个子图:左上、右上、左下、右下
图片由下一个结构表示:
typedef struct block_image
{
int allBlack; //boolean
struct block_image * son[4];
}block_image;
typedef block_image *image;
如果指针 == NULL,则图片为白色
如果指针指向 allBlack == true 的结构,则图片为黑色且 son[0]、son['1']、son[2] 和 son[3] 为 NULL。
如果指针指向 allBlack == false 的结构,则图片是通过分解 4 图片和 son[0]、son['1']、son[2] 和 son[3] 得到的]分别在左上角、右上角、左下角和右下角。
利用这些信息,可以实现创建图像的三个功能:
Build_white():构建白色图片:
image Build_white()
{
image newImage = NULL;
return newImage;
}
Build_black():构建黑色图片:
image Build_black()
{
image newImage = malloc(sizeof(block_image));
newImage->allBlack = 1;
newImage->son[0] = NULL;
newImage->son[1] = NULL;
newImage->son[2] = NULL;
newImage->son[3] = NULL;
return newImage;
}
Build_composed(image topL, image topR, image bottomL, image bottomR):构建合成图:
image Build_composed(image topL, image topR, image bottomL, image bottomR)
{
image newImage = malloc(sizeof(block_image));
newImage->allBlack = 0;
newImage->son[0] = topL;
newImage->son[1] = topR;
newImage->son[2] = bottomL;
newImage->son[3] = bottomR;
return newImage;
}
问题:
但是之后,需要实现一个函数来打印图片,比如白色图片用“W”表示,黑色图片用“B”表示,合成图片用+img1img2img3img4表示,比如+白胖子.
所以,目前,我正在尝试编写此函数的代码,并传递给打印黑白图片(未合成)。
我当前的功能:
void normalDisplay(image myPicture)
{
if(myPicture == NULL)
{
printf("W");
}
else if(myPicture->allBlack == 1 && myPicture->son[0] == NULL && myPicture->son[1] == NULL && myPicture->son[2] == NULL && myPicture->son[3] == NULL)
{
printf("N");
}
}
在 main() 中:
图片 white1 = Build_white();
图片黑色1 = Build_black();
如果我做 normalDisplay(white1);我在终端上得到“W”,如果我这样做 normalDisplay(black1);我在终端上得到“B”。
否则,我不知道如何打印组合函数,如何管理我的函数的不同可能性以打印更复杂的图片。
比如这张图(课程示例):
可以这样编码:
image composed = Build_composed(
Build_black(),
Build_white(),
Build_white(),
Build_composed(
Build_black(),
Build_white(),
Build_composed(
Build_white(),
Build_black(),
Build_lack(),
Build_white()
),
Build_black()
)
);
并且应该显示为:+BWW+BW+WBBWB 使用 normalDisplay 函数。
所以,任何人都可以帮助我理解如何通过解释如何修改我的函数来显示带有后缀符号的合成图像,以便它可以考虑最多的情况?
how I could display a composed image with a postfix notation by explaining how to modify my function so that it can consider a maximum of cases?
这真是微不足道。只为这个单元格显示它或为孩子们显示它。
typedef struct block_image image;
void normalDisplay(image *t) {
if (t == NULL) {
printf("W");
} else if (t->allBlack) {
printf("B");
} else {
printf("+");
normalDisplay(t->son[0]); // upper left
normalDisplay(t->son[1]); // upper right
normalDisplay(t->son[2]); // lower left
normalDisplay(t->son[3]); // lower right
}
}
目前正在尝试用C语言实现不同的函数来实现对四叉树的运算
上下文:
一个四叉树(黑白图片)是:
- 白色
- 黑色
- 分为4个子图:左上、右上、左下、右下
图片由下一个结构表示:
typedef struct block_image
{
int allBlack; //boolean
struct block_image * son[4];
}block_image;
typedef block_image *image;
如果指针 == NULL,则图片为白色
如果指针指向 allBlack == true 的结构,则图片为黑色且 son[0]、son['1']、son[2] 和 son[3] 为 NULL。
如果指针指向 allBlack == false 的结构,则图片是通过分解 4 图片和 son[0]、son['1']、son[2] 和 son[3] 得到的]分别在左上角、右上角、左下角和右下角。
利用这些信息,可以实现创建图像的三个功能:
Build_white():构建白色图片:
image Build_white()
{
image newImage = NULL;
return newImage;
}
Build_black():构建黑色图片:
image Build_black()
{
image newImage = malloc(sizeof(block_image));
newImage->allBlack = 1;
newImage->son[0] = NULL;
newImage->son[1] = NULL;
newImage->son[2] = NULL;
newImage->son[3] = NULL;
return newImage;
}
Build_composed(image topL, image topR, image bottomL, image bottomR):构建合成图:
image Build_composed(image topL, image topR, image bottomL, image bottomR)
{
image newImage = malloc(sizeof(block_image));
newImage->allBlack = 0;
newImage->son[0] = topL;
newImage->son[1] = topR;
newImage->son[2] = bottomL;
newImage->son[3] = bottomR;
return newImage;
}
问题:
但是之后,需要实现一个函数来打印图片,比如白色图片用“W”表示,黑色图片用“B”表示,合成图片用+img1img2img3img4表示,比如+白胖子.
所以,目前,我正在尝试编写此函数的代码,并传递给打印黑白图片(未合成)。
我当前的功能:
void normalDisplay(image myPicture)
{
if(myPicture == NULL)
{
printf("W");
}
else if(myPicture->allBlack == 1 && myPicture->son[0] == NULL && myPicture->son[1] == NULL && myPicture->son[2] == NULL && myPicture->son[3] == NULL)
{
printf("N");
}
}
在 main() 中: 图片 white1 = Build_white();
图片黑色1 = Build_black();
如果我做 normalDisplay(white1);我在终端上得到“W”,如果我这样做 normalDisplay(black1);我在终端上得到“B”。
否则,我不知道如何打印组合函数,如何管理我的函数的不同可能性以打印更复杂的图片。
比如这张图(课程示例):
可以这样编码:
image composed = Build_composed(
Build_black(),
Build_white(),
Build_white(),
Build_composed(
Build_black(),
Build_white(),
Build_composed(
Build_white(),
Build_black(),
Build_lack(),
Build_white()
),
Build_black()
)
);
并且应该显示为:+BWW+BW+WBBWB 使用 normalDisplay 函数。
所以,任何人都可以帮助我理解如何通过解释如何修改我的函数来显示带有后缀符号的合成图像,以便它可以考虑最多的情况?
how I could display a composed image with a postfix notation by explaining how to modify my function so that it can consider a maximum of cases?
这真是微不足道。只为这个单元格显示它或为孩子们显示它。
typedef struct block_image image;
void normalDisplay(image *t) {
if (t == NULL) {
printf("W");
} else if (t->allBlack) {
printf("B");
} else {
printf("+");
normalDisplay(t->son[0]); // upper left
normalDisplay(t->son[1]); // upper right
normalDisplay(t->son[2]); // lower left
normalDisplay(t->son[3]); // lower right
}
}