Write a C++ program that creates a tree from given input, and prints the leaf no
ID: 3684554 • Letter: W
Question
Write a C++ program that creates a tree from given input, and prints the leaf nodes using the level-order traversal.
The following is how we define tree nodes:
struct node
{ int item; node *l, *r;
node(int x)
{ item = x; l = 0; r = 0; }
};
typedef node* link;
The trees for this assignment have the following properties:
1)Each node has zero, one, or two children (left child and right child);
2)Each node has a unique key. That is, the item in each node is different from items in all other nodes.
3)Each input item is also unique.
You may find the following function useful. This function visits nodes in a tree in level order starting at the given root h using a QUEUE (you can use any implementation for QUEUE):
void traverse(link root, int n)
{
link h;
QUEUE q(n);
q.put(root);
while (!q.empty())
{
h = q.get(); // get link h at the head of the queue
if (h->l != 0) q.put(h->l);
if (h->r != 0) q.put(h->r);
}
}
Your program will receive the following input and do the following for each input:
C <int r> : Create the root node with item r. If the tree is not empty (i.e. the root exists), return an error
L <int p> <int l>: Find the node with item p. Let u be that node. Create a new node v with item l. Make node v node u’s left child. If node u has already a left child, return an error
R <int p> <int r>: Find the node with item p. Let u be that node. Create a new node v with item r. Make node v node u’s right child. If node u has already a right child, return an error
P: Print the items in nodes in a level order traversal manner
S <int p>: Find the node with item p. Let u be that node. Print the items in nodes in the subtree rooted at u in level order traversal manner
See the example dialogue below:
C 5
Root node with item 5 has been created
C 10
Error: Tree is not empty
L 5 3
Node with item 3 has been added
R 5 4
Node with item 4 has been added
P
level order traversal of the entire tree: 5 3 4
S 4
Level order traversal of the asked subtree: 4
L 4 7
R 7 8
R 3 9
L 9 11
R 4 12
L 7 13
S 3
level order traversal of the asked subtree: 3 9 11
S 4
level order traversal of the asked subtree: 4 7 12 13 8
L 8 14
R 12 15
R 8 16
L 13 17
P
level order traversal of the entire tree: 5 3 4 9 7 12 11 13 8 15 17 14 16
Explanation / Answer
Hi below i have written the sample C function for your reference,
#include <stdio.h>
#include <stdlib.h>
/* A binary tree node has data, pointer to left child
and a pointer to right child */
struct node
{
int data;
struct node* left, *right;
};
/* Function protoypes */
void printGivenLevel(struct node* root, int level);
int height(struct node* node);
struct node* newNode(int data);
/* Function to print level order traversal a tree*/
void printLevelOrder(struct node* root)
{
int h = height(root);
int i;
for (i=1; i<=h; i++)
printGivenLevel(root, i);
}
/* Print nodes at a given level */
void printGivenLevel(struct node* root, int level)
{
if (root == NULL)
return;
if (level == 1)
printf("%d ", root->data);
else if (level > 1)
{
printGivenLevel(root->left, level-1);
printGivenLevel(root->right, level-1);
}
}
/* Compute the "height" of a tree -- the number of
nodes along the longest path from the root node
down to the farthest leaf node.*/
int height(struct node* node)
{
if (node==NULL)
return 0;
else
{
/* compute the height of each subtree */
int lheight = height(node->left);
int rheight = height(node->right);
/* use the larger one */
if (lheight > rheight)
return(lheight+1);
else return(rheight+1);
}
}
/* Helper function that allocates a new node with the
given data and NULL left and right pointers. */
struct node* newNode(int data)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
/* Driver program to test above functions*/
int main()
{
struct node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
printf("Level Order traversal of binary tree is ");
printLevelOrder(root);
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.