Expression Trees

 

 

Inorder Traversal

 

1.  Traverse the left subtree

2.  Visit the node

3.  Traverse the right subtree

 


class ExpressionTree

{

public:

    void InorderTraverse() const;

    ...

private:

    struct Node { ... };

    Node* root;

 

    void InorderTraverse( /* in */ Node* ptr ) const;

};

 

void ExpressionTree::InorderTraverse() const

{

    InorderTraverse( root );

}

 

void ExpressionTree::InorderTraverse( /* in */ Node* ptr ) const

{

    if ( ptr != NULL )

    {

        InorderTraverse( ptr->left );

        cout << ptr->key;

        InorderTraverse( ptr->right );

    }

}

   

Postorder Traversal

 

1.  Traverse the left subtree

2.  Traverse the right subtree

3.  Visit the node

 


class ExpressionTree

{

public:

    void PostorderTraverse() const;

    ...

private:

    ...

    void PostorderTraverse( /* in */ Node* ptr ) const;

};

 

void ExpressionTree:: PostorderTraverse() const

{

    PostorderTraverse( root );

}

 

void ExpressionTree:: PostorderTraverse( /* in */ Node* ptr ) const

{

    if ( ptr != NULL )

    {

        PostorderTraverse( ptr->left );

        PostorderTraverse( ptr->right );

        cout << ptr->key;

 

    }

}