遍历树 - 如何首先打印边

时间:2012-06-10 18:02:32

标签: algorithm tree binary-tree tree-traversal

如果我有一棵树如下:

          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

  • 如何遍历此树,以便首先打印Level 2节点,然后打印1级,然后打印根级

    C,D,T,J,G,Z,A

我正在维基百科上看到树上的几个人,并记得我曾在一次采访中被问过的一个老问题。我认为问题是上述三个问题(很可能是第一个或第二个)。

1 个答案:

答案 0 :(得分:0)

预先遍历遍历:在子树之前访问root

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

顺序遍历:访问子树之间访问root

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

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

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

为了清楚起见,确实希望算法是通用的,例如应用于n级或仅3级,导致差异在逻辑上就像是巨大的。