[英]Traversing a general tree recursively in depth-first order
我被要求實現一個遞歸函數,以深度優先的順序遍歷一棵普通樹(第一個孩子,下一個同級符號)和一個二叉樹。
該函數應在最后一次訪問節點時將其打印出來。 例如,對於下面的樹,應按以下順序打印節點。 我想我已經完成了二叉樹的功能,但是我做不到一般的功能:
這是我的二叉樹代碼:
void PostOrder(node* root) {
if (root == NULL)
return;
else {
PostOrder(root->left);
PostOrder(root->right);
printf(‘%c’, root->key);
}
}
有人可以幫忙嗎?
聽起來這是一個典型的“用二叉樹表示的一般樹”,它有兩個指針:第一個孩子和下一個兄弟。 我們可以將樹繪制為標准的二叉樹,每個子樹都有一個向下的箭頭和一個向右的箭頭。
我認為您評論中描述的樹如下所示:
a
|
V
b ------------> c
| |
V V
d --> e --> f g
|
V
h --> i
您想要在樹的每個節點上:
將其應用於上面的樹,我們得到:
GeneralTreePostOrder(a) ->
GeneralTreePostOrder(b) -> # Follow child pointer
GeneralTreePostOrder(d) -> # Follow child pointer
# No children
print d
GeneralTreePostOrder(e) -> # Follow sibling pointer
# No children
print e
GeneralTreePostOrder(f) -> # Follow sibling pointer
# No children
print f
# No more siblings
print b
GeneralTreePostOrder(c) -> # Follow sibling pointer
等等,它打印defhigca
。
為常規樹編寫一個新函數(NB printf
應該使用雙引號格式的字符串):
void GeneralTreePostOrder (node* root) {
if (root == NULL)
return;
else {
GeneralTreePostOrder (root->left); // Process children
printf ("%c", root->key);
GeneralTreePostOrder (root->right); // Process siblings
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.