【问题标题】:Traversing a tree - How to print the edges first遍历树 - 如何首先打印边缘
【发布时间】:2012-06-10 18:02:31
【问题描述】:

如果我有一棵树如下:

          A                Root Level
        /   \
       /     \
      G       Z            Level 1
     / \     /  \
    /   \   /    \
   C     D  T     J        Level 2

我有三个问题:

  • 如何遍历这棵树,以便首先打印级别 1 节点,然后是根级别,然后是级别 2

    G、Z、A、C、D、T、J

  • 如何遍历这棵树,以便首先打印级别 1 节点,然后打印级别 2,然后是根级别

    G、Z、C、D、T、J、A

  • 我怎样才能遍历这棵树,以便首先打印级别 2 节点,然后是级别 1,然后是根级别

    C、D、T、J、G、Z、A

我正在浏览维基百科上的树遍历,并记得我曾经在一次采访中被问到的一个老问题。我相信问题是上述三个中的一个(很可能是第一个或第二个)。

【问题讨论】:

标签: algorithm tree binary-tree tree-traversal


【解决方案1】:

前序遍历:在子树之前访问根

void preorder( BTREE__NODE_p_t node )
    if ( node != NULL )
        visit( node )
        preorder( node->left )
        preorder( node->right )

中序遍历:访问子树之间访问根

void inorder( BTREE__NODE_p_t node )
    if ( node != NULL )
        inorder( node->left )
        visit( node )
        inorder( node->right )

后序遍历:访问子树后访问根

void postorder( BTREE__NODE_p_t node )
    if ( node != NULL )
        postorder( node->left )
        postorder( node->right )
        visit( node )

为了清楚起见,确实希望算法具有通用性,例如应用于 n 级或仅 3 级,因为逻辑上的差异非常大。

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 2021-05-04
    • 2023-03-29
    • 2020-01-15
    • 2020-04-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多