-1

If I have a tree as below:

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

I have three questions:

  • How can I traverse this tree such that Level 1 nodes are printed first, then root level, and then level 2

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

  • How can I traverse this tree such that Level 1 nodes are printed first, then level 2, and then root level

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

  • How can I traverse this tree such that Level 2 nodes are printed first, then level 1, and then root level

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

I'm going through tree traverals on wikipedia and remembered an old question I was once asked in an interview. I believe the question was either of the above three (most likely first or second).

Anthony
  • 33,838
  • 42
  • 169
  • 278

1 Answers1

0

Preorder traversal: visit root before the subtrees

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

Inorder traversal: visit root between visiting the subtrees

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

Postorder traversal: visit root after visiting the subtrees

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

just to be clear, do want the algorithm to be generic, something like applying to n levels or just 3, cause the difference is like huge in terms of logic.

Tawfik Khalifeh
  • 939
  • 6
  • 21