典型的二進位制樹表示
通常,我們將一個 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);
}