0

我写了这个函数:

 void printDFS(pXml_Element root)
    {
    int i ;



    printf("< %s > \n", root->data->name);

    for ( i = 0 ; i < root->childrenList->num_of_items ; i++)
    {
        void*           voidElem;
        pXml_Element    currElem;


        voidElem  = getStructDataAtIndex(root->childrenList, i);
        if (!voidElem)
        {
            printf("error: couldn't get data.. \n");
            return;
        }

        currElem = (pXml_Element)voidElem;

        printDFS(currElem);

      }


    }

它像 DFS 搜索一样运行,但我想添加空格。

我的 DS 是一棵树,其中每个节点都有子节点(我知道它们的数量)我使用深度搜索运行并打印我的上下文,但我没有空格。我希望它看起来像 XML 格式:

<node>
   <n1> 
   <n2>
      <o1>
      <o2>
  <n3>

像那样。

我也写了这个函数:

  void printSpace(int numOfspaces)
       {
         while(numOfspaces > 0)
          {
             printf("  ");
             numOfspaces--;
         }
      }

但我仍然没有这样做:(任何人都可以帮助我>希望得到一个解释如何正确地做......谢谢!

4

1 回答 1

0

基本上,制作一个全局或静态变量来计算递归深度,并在输入函数时增加它:

void printDFS(pXml_Element root)
{
   static int Depth=-1;
   ...

   Depth++;

然后,用适当数量的空格缩进每一行:

printSpace(3*Depth);
printf("< %s > \n", root->data->name);

在函数结束时,再次减小它:

        printDFS(currElem);
    }
    Depth--;
}

编辑:一个线程安全的替代方案将是一个额外的“深度”参数;您只需在递归调用中传递“Depth+1”,并为初始调用传递“0”。

void printDFS(pXml_Element root, unsigned int Depth)
{
   ....
   printDFS(currElem,Depth+1);
   ...
}
于 2012-08-19T11:01:11.227 回答