The third programming project involves writing a program that allows the user to enter a binary tree in a
parenthesized prefix format and then allows it to be categorized and allows various features of that tree to be
displayed. An example of a tree written in the input format is the following:
(A(G(j)(1))(z(5)))
In the above example, data in each node of the tree contains a single alphanumeric character. No spaces are
permitted. Each tree is enclosed in parentheses. Inside those parentheses, after the single character are either
zero, one or two subtrees also enclosed in parentheses. When only one subtree is present, it is the left subtree
and when two are present, they represent the left and right subtrees. So the above string represents the following
binary tree:
A
zG
j 1 5
The various categorizations include the following:
1. Whether the binary tree is balanced, which means for each node in the tree, the absolute difference
between the height of its left and right subtrees is at most 1. The above binary tree is balanced.
2. Whether the binary tree is full. A full binary tree has the maximum number of nodes for a tree of its
height. The above tree is not full because a tree of that height can contain 7 nodes, but the above tree
only has 6.
3. Whether the binary tree is proper. In a proper binary tree, every node has either 0 or 2 children. The
above tree is not proper because the node containing z has only one child.
In addition, the program should allow the user to request that each of the following features of the tree be
displayed:
1. The height of the tree. The height of a tree is the maximum level of all of its nodes. The root node
containing A is at the level 0. Because all three leaf nodes in the above tree are at level 2, its height is 2.
2. The number of nodes in the tree. As previously mentioned, the above tree has 6 nodes.
3. An fully parenthesized in order traversal of the tree. The following should be displayed as the inorder
traversal of the above tree: ((( j ) G ( 1 )) A (( 5 ) z ))