典型的二進位制樹表示

通常,我們將一個 anary 樹(每個節點可能無限的子節點)表示為二叉樹(每個節點只有兩個子節點)。 下一個孩子被視為兄弟姐妹。請注意,如果樹是二進位制,則此表示將建立額外的節點。

然後我們對兄弟姐妹進行迭代並對孩子們進行遞迴。由於大多數樹木相對較淺 - 很多孩子只有幾層次的層次結構,這就產生了有效的程式碼。注意人類家譜是一個例外(許多級別的祖先,每個級別只有幾個孩子)。

如果需要,可以保留後退指標以允許樹上升。這些更難維護。

請注意,通常有一個函式可以呼叫根,一個遞迴函式有額外的引數,在本例中是樹深度。

  struct node
  {
     struct node *next;
     struct node *child;
     std::string data;
  }

  void printtree_r(struct node *node, int depth)
  {
     int i;

     while(node)
     {
         if(node->child)
         {
            for(i=0;i<depth*3;i++)
                printf(" ");
            printf("{\n"):
            printtree_r(node->child, depth +1);
            for(i=0;i<depth*3;i++)
                printf(" ");
            printf("{\n"):
    
            for(i=0;i<depth*3;i++)
               printf(" ");
             printf("%s\n", node->data.c_str());

             node = node->next;
          }
      }
  }

  void printtree(node *root)
  {
     printree_r(root, 0);
  }