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 に答える