C二叉树叉的深度和宽度



我正在学习C,我一直在学习fork函数和进程。我想创建一个c程序,它得到2个输入(深度和宽度(来创建像中的树一样的图像

这是我现在做的代码:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include<sys/wait.h>
int
main (int argc, char *argv[])
{
int i, depth, width, pid, j, pid2;
if (argc != 3)
exit (0);
depth= atoi (argv[1]);
width = atoi (argv[2]);
for (i = 0; i < width; i++)
{
pid = fork ();
if (pid < 0)
{
printf ("Error");
exit (1);
}
else if (pid == 0)
{
for (j = 0; j < depth; j++)
{
pid2 = fork ();
if (pid2 < 0)
{
printf ("Error");
exit (1);
}
else if (pid2 == 0)
{
printf ("Child (%d): %dn", j + 1, getpid ());
exit (0);
}
else
{
wait (NULL);
}
}
}
else
{
wait (NULL);
}
}
printf ("Child %d and parent %dn", getpid (), getppid ());
sleep (1);
return 0;
}

你的帖子并没有真正包含问题,所以我假设问题是,我试图运行我的代码,为什么它不能产生预期的"树";。既然你在学习C,我想你不想要确切的代码,而是想学习";为什么它不起作用";。

首先,你的图片并不代表一棵宽2深3的树。你的照片只显示了宽度为2的树的一部分,而不是整棵树,我也不清楚你是否理解深度。先Grok这个东西。

在您理解了树之后,您就可以用一个进程来实现一个树了(暂时忘记fork(。对于树的每个节点,不需要分叉一个进程,只需打印一些内容,这样您就可以看到您拥有所需的所有节点。

不能实现一个有两个嵌套循环的树,一个用于宽度,另一个用于深度。宽度可以使用for循环,但深度必须使用递归。递归函数将深度作为一个参数,当您再次调用它时,您会递减深度。

好吧,一旦你弄清楚了,那么你就可以添加分叉了。你会注意到,通过多个流程,事情会变得更加困难!

哦,并确保您的代码正确缩进。它将帮助你理解事物。

最新更新