[英]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.