0% found this document useful (0 votes)
219 views

Binary Expression Trees

A binary expression tree is a binary tree that represents a mathematical expression, where each leaf node contains an operand, each internal node contains an operator, and the left and right subtrees of an operator node represent subexpressions that must be evaluated before applying the operator. Binary expression trees allow easy generation of infix, prefix, and postfix notation of an expression and provide an efficient way to evaluate an expression by traversing the tree. Nodes in a binary expression tree contain pointers to left and right child nodes and information about whether they represent an operator or operand.

Uploaded by

swapnil_joshi_55
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
219 views

Binary Expression Trees

A binary expression tree is a binary tree that represents a mathematical expression, where each leaf node contains an operand, each internal node contains an operator, and the left and right subtrees of an operator node represent subexpressions that must be evaluated before applying the operator. Binary expression trees allow easy generation of infix, prefix, and postfix notation of an expression and provide an efficient way to evaluate an expression by traversing the tree. Nodes in a binary expression tree contain pointers to left and right child nodes and information about whether they represent an operator or operand.

Uploaded by

swapnil_joshi_55
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, 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 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.

A Binary Expression Tree


*

+ 4

What value does it have? ( 4 + 2 ) * 3 = 18


5

Easy to generate the infix, prefix, postfix expressions (how?)


*

- 8 5 4
Infix: Prefix: Postfix: ((8-5)*((4+2)/3)) *-85 /+423 85- 42+3/*

3 2

Inorder Traversal: (A + H) / (M - Y)
tree / Print second

+
A H M

- Y

Print left subtree first

Print right subtree last


7

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

+
A H M

- Y

Print left subtree second

Print right subtree last


8

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

+
A H M

- Y

Print left subtree first

Print right subtree second


9

class ExprTree

ExprTree

*
private:
TreeNode* root;

~ExprTree
Build Evaluate . . .

+ 4

10

Each node contains two pointers


struct TreeNode { InfoNode info ; TreeNode* left ; TreeNode* right ; }; // Data member // Pointer to left child // Pointer to right child

NULL . left

OPERAND
. whichType

7
. operand

6000 . right
11

. info

InfoNode has 2 forms


enum OpType { OPERATOR, OPERAND } ; struct InfoNode { OpType union { char int } }; whichType;

// ANONYMOUS union
operation ; operand ;

OPERATOR
. whichType

+
. operation

OPERAND
. whichType

7
12

. operand

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