0% found this document useful (0 votes)
5 views14 pages

Binary Expression Trees

A Binary Expression Tree is a specific type of binary tree where leaf nodes contain operands and nonleaf nodes contain operators, with the structure indicating the order of operations. The document explains how to evaluate expressions, generate infix, prefix, and postfix notations, and details the traversal methods for the tree. It also includes a code snippet for evaluating the tree and instructions for building the tree from prefix notation.

Uploaded by

tinorey717
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views14 pages

Binary Expression Trees

A Binary Expression Tree is a specific type of binary tree where leaf nodes contain operands and nonleaf nodes contain operators, with the structure indicating the order of operations. The document explains how to evaluate expressions, generate infix, prefix, and postfix notations, and details the traversal methods for the tree. It also includes a code snippet for evaluating the tree and instructions for building the tree from prefix notation.

Uploaded by

tinorey717
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

An application of binary trees:

Binary Expression Trees

CS308
Data Structures

1
A Binary Expression Tree is . . .
A special kind of binary tree in which:
1. Each leaf node contains a single operand
2. Each nonleaf node contains a single binary
operator
3. The left and right subtrees of an operator
node represent subexpressions that must be
evaluated before applying the operator at
the root of the subtree.

2
A Four-Level Binary Expression

‘*’

‘-’ ‘/’

‘8’ ‘5’ ‘+’ ‘3’

‘4’ ‘2’

3
Levels Indicate Precedence
The levels of the nodes in the tree indicate
their relative precedence of evaluation (we
do not need parentheses to indicate precedence).

Operations at higher levels of the tree are


evaluated later than those below them.

The operation at the root is always the last


operation performed.

4
A Binary Expression Tree
‘*’

‘+’ ‘3’

‘4’ ‘2’

What value does it have?

( 4 + 2 ) * 3 = 18
5
Easy to generate the infix, prefix,
postfix expressions (how?)

‘*’

‘-’ ‘/’

‘8’ ‘5’ ‘+’ ‘3’

‘4’ ‘2’

Infix: ((8-5)*((4+2)/3)
)
Prefix: *-85 /+423
Postfix: 85- 42+3/* 6
Inorder Traversal: (A + H) / (M - Y)
Print second
tree

‘/’

‘+’ ‘-’

‘A’ ‘H’ ‘M’ ‘Y’

Print left subtree first Print right subtree last


7
Preorder Traversal: / + A H - M Y
Print first
tree

‘/’

‘+’ ‘-’

‘A’ ‘H’ ‘M’ ‘Y’

Print left subtree second Print right subtree last


8
Postorder Traversal: A H + M Y - /
Print last
tree

‘/’

‘+’ ‘-’

‘A’ ‘H’ ‘M’ ‘Y’

Print left subtree first Print right subtree second


9
class ExprTree

ExprTree ‘*’
~ExprTree private:
TreeNode*
Build root; ‘+’ ‘3’
Evaluate
. ‘4’ ‘2’
.
.
10
Each node contains two pointers
struct TreeNode
{
InfoNode info ; // Data member
TreeNode* left ; // Pointer to left child
TreeNode* right ; // Pointer to right child
};

NULL OPERAND 7 6000


. whichType . operand

. left . info . right


11
InfoNode has 2 forms
enum OpType { OPERATOR, OPERAND } ;

struct InfoNode
{
OpType whichType;
union // ANONYMOUS union
{
char operation ;
int operand ;
}
};
OPERATOR ‘+’ OPERAND 7
. whichType . operation . whichType . operand
12
int Eval ( TreeNode* ptr )

{ switch ( ptr->info.whichType )
{
case OPERAND : return ptr->info.operand ;
case OPERATOR :
switch ( tree->info.operation )
{
case ‘+’ : return ( Eval ( ptr->left ) + Eval ( ptr->right ) ) ;

case ‘-’ : return ( Eval ( ptr->left ) - Eval ( ptr->right ) ) ;

case ‘*’ : return ( Eval ( ptr->left ) * Eval ( ptr->right ) ) ;


case ‘/’ : return ( Eval ( ptr->left ) / Eval ( ptr->right ) ) ;
}
}
}

13
Building a Binary Expression Tree from an
expression in prefix notation

● Insert new nodes, each time moving to the left


until an operand has been inserted.

● Backtrack to the last operator, and put the


next node to its right.

● Continue in the same pattern.

14

You might also like