繁体   English   中英

以深度优先顺序递归遍历一般树

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

您想要在树的每个节点上:

  1. 通过处理第一个孩子,首先打印所有后代(按照向下箭头)。
  2. 然后打印节点的值
  3. 然后处理兄弟姐妹(按照右箭头)。

将其应用于上面的树,我们得到:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM