這聽起來像是一個典型的「二叉樹表示的一般樹」,有兩個指針:第一個孩子和下一個兄弟姐妹。我們可以將樹繪製爲標準的二叉樹,每個孩子都有一個向下的前導箭頭和一個向右的前導箭頭。
我想在您的評論中描述的樹是這個樣子:
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
等等,這些打印d e f h i g c a
。
編寫一個新的功能,對於一般樹(注:printf
應該使用雙引號的格式字符串):
void GeneralTreePostOrder (node* root) {
if (root == NULL)
return;
else {
GeneralTreePostOrder (root->left); // Process children
printf ("%c", root->key);
GeneralTreePostOrder (root->right); // Process siblings
}
}
你爲什麼不使用'DFS'? – Maroun
通用定義如何?節點是否有一組子節點?你爲一般情況做了什麼?詳情請 – StoryTeller
每個節點都有兩個指針!第一個指向第一個孩子,另一個指向下一個兄弟(對於一般樹)。謝謝 – user1680944