簡體   English   中英

C 二叉樹叉深度和寬度

[英]C Binary Tree fork depth and width

我正在學習 C 並且我堅持使用叉子 function 和進程。 我想創建一個 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): %d\n", j + 1, getpid ());
                  exit (0);
                }
                  else
                {
                  wait (NULL);
                }
            }
        }
          else
        {
          wait (NULL);
        }
    }

  printf ("Child %d and parent %d\n", getpid (), getppid ());
  sleep (1);
  return 0;
}

首先,您誤解了樹的“寬度”和“深度”的含義-您的圖片不代表寬度為2和深度為3的樹。您的圖片僅顯示寬度為2的樹的一部分,而不是整棵樹; 而且,在您的圖片中,樹的深度是 2,而不是 3。先了解這些東西。

在你理解了樹之后,你就可以用一個進程來實現樹了(暫時忘記fork )。

您無法實現具有 2 個嵌套循環的樹,一個用於寬度,一個用於深度。 您可以使用for循環來獲取寬度,但您必須使用遞歸來獲取深度。 遞歸 function 有深度作為參數,當你再次調用它時,你增加了參數。

好的,一旦你弄清楚了,然后添加分叉。

暫無
暫無

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

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