ECE 103 Engineering Programming
Chapter 64
Tree Implementation
Herbert G. Mayer, PSU CS
Status 7/4/2016
Initial content copied verbatim from
ECE 103 material developed by
Professor Phillip Wong @ PSU ECE
Syllabus
Pointer Version
Tree : Pointer Version
A binary sort tree is created using pointers to nodes.
Nodes are created at runtime using malloc().
2
Define structure of tree element
/* Tree element */
struct tree_node
{
int value; /* Node value */
struct tree_node *left;
struct tree_node *right;
/* Pointer to left child node */
/* Pointer to right child node */
};
typedef struct tree_node Node;
3
tree
value
Binary sort tree
left
right
value
value
left
…
right
…
left
…
right
…
4
Create the tree
int main( void )
{ //main
Node *tree = NULL;
int rvalue;
int k;
// Pointer to tree; see NODE from page 3
/* Random value */
/* Loop index */
srand( time( NULL ) ); /* Initialize random seed */
/* Build the tree with randomly generated values */
printf( "Original values: ” );
for( k = 0; k < 10; k++ ) {
rvalue = rand() % 100 + 1; /* 1 to 100 */
printf("%d ", rvalue );
insert_node( &tree, rvalue );
} //end for
printf( ”\n” );
/* Show sorted list of values */
printf( "\n\nSorted values:
");
display_inorder( tree );
printf( ”\n” );
return 0;
} //end main
5
Create a new tree node
Node * create_node( int num )
{ // create_node
Node *p; /* Work pointer */
/* Use run-time memory allocation to create new node */
if( ( p = (Node *) malloc( sizeof(Node) ) ) == NULL ) {
printf("ERROR: Unable to allocate memory for node\n");
exit(1);
} //end if
/* Initialize contents of new node */
p->value = num;
p->left = NULL;
p->right = NULL;
return p; /* Return pointer to newly created node */
} //end create_node
6
Insert a new node in the tree
void insert_node (Node **tree, int value)
{ // insert_node
/* The value is sorted as it is placed in the binary tree */
if( *tree == NULL )
/* No more children, so insert here */
*tree = create_node(value);
else if( value <= (*tree)->value )
/* Traverse left branch */
insert_node(&(*tree)->left, value);
else // value > (*tree)->value
/* Traverse right branch */
insert_node(&(*tree)->right, value);
} //end insert_node
7
Display the contents of the entire tree
void display_inorder N ode *tree )
{ // display_inorder
/* Use inorder recursion */
if( tree->left != NULL ) {
display_inorder( tree->left );
} //end if
printf("%d ", tree->value);
if( tree->right != NULL ) {
display_inorder( tree->right );
} //end if
} //end display_inorder
8
Example:
Original order of input values:
8 79 6 64 56 86 39 46 13 42
tree
8
6
Pre-order traversal:
display node
traverse(left)
traverse(right)
Display order:
8 6 79 64 56 39 13 46 42 86
79
64
86
56
In-order traversal:
traverse(left)
display node
traverse(right)
39
13
46
Display order:
6 8 13 39 42 46 56 64 79 86
42
Sample binary tree
Post-order traversal:
traverse(left)
traverse(right)
display node
Display order:
6 13 42 46 39 56 64 86 79 8
9
© Copyright 2026 Paperzz