Algorithm 遍历树-如何首先打印边

Algorithm 遍历树-如何首先打印边,algorithm,tree,binary-tree,tree-traversal,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,

如果我有一棵树,如下所示:

          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


我正在浏览维基百科上的一篇文章,我想起了一个老问题,有一次我在采访中被问到。我相信问题是上述三个问题之一(很可能是第一个或第二个)

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

void preorder( BTREE__NODE_p_t node )
    if ( node != NULL )
        visit( node )
        preorder( node->left )
        preorder( node->right )
void postorder( BTREE__NODE_p_t node )
    if ( node != NULL )
        postorder( node->left )
        postorder( node->right )
        visit( node )
顺序遍历:在访问子树之间访问根

void inorder( BTREE__NODE_p_t node )
    if ( node != NULL )
        inorder( node->left )
        visit( node )
        inorder( node->right )
后序遍历:访问子树后访问根

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

需要明确的是,您希望算法是通用的,比如适用于n个级别或仅适用于3个级别,因为逻辑上的差异非常大。

您可能对此感兴趣:。如果有四个级别,您希望发生什么?