Question

In: Computer Science

Modifying the tree traversal C program shown below to do reversed tree traversal as defined below....

Modifying the tree traversal C program shown below to do reversed tree traversal as defined below.

Reversed PreOrder: Root, Right, Left.

Reversed InOrder:     Right, Root, Left.

Reversed PostOrder: Right, Left, Root.

The tree is:

Root = 1, Left(1) = -2, Right(1) = -3;

Left(-2) = 4, Right(-2) = 5;

Left(-3) = 6, Right(-3)= 7;

Left(5) = -8, Right(5)= -9;

Left(7) = 10, Right(7) = 11;

Left(11) = -12, Right(11) = -13;

Left(-13) = 14.

Your program should output the printed sequence of node IDs (positive or negative) according to the required order.

Code:

// C program for different tree traversals
#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;
   struct node* right;
};

/* 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);
}

/* Given a binary tree, print its nodes according to the
"bottom-up" postorder traversal. */
void printPostorder(struct node* node)
{
   if (node == NULL)
       return;

   // first recur on left subtree
   printPostorder(node->left);

   // then recur on right subtree
   printPostorder(node->right);

   // now deal with the node
   printf("%d ", node->data);
}

/* Given a binary tree, print its nodes in inorder*/
void printInorder(struct node* node)
{
   if (node == NULL)
       return;

   /* first recur on left child */
   printInorder(node->left);

   /* then print the data of node */
   printf("%d ", node->data);

   /* now recur on right child */
   printInorder(node->right);
}

/* Given a binary tree, print its nodes in preorder*/
void printPreorder(struct node* node)
{
   if (node == NULL)
       return;

   /* first print data of node */
   printf("%d ", node->data);

   /* then recur on left sutree */
   printPreorder(node->left);

   /* now recur on right subtree */
   printPreorder(node->right);
}     

/* 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("\nPreorder traversal of binary tree is \n");
   printPreorder(root);

   printf("\nInorder traversal of binary tree is \n");
   printInorder(root);

   printf("\nPostorder traversal of binary tree is \n");
   printPostorder(root);

   getchar();
   return 0;
}

Solutions

Expert Solution

// C program for different tree traversals
#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;
struct node* right;
};

/* 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);
}

/* Given a binary tree, print its nodes according to the
"bottom-up" postorder traversal. */
void printPostorder(struct node* node)
{
if (node == NULL)
return;

//first recur on right subtree
printPostorder(node->right);

// then recur on left subtree
printPostorder(node->left);   

// now deal with the node
printf("%d ", node->data);
}

/* Given a binary tree, print its nodes in inorder*/
void printInorder(struct node* node)
{
if (node == NULL)
return;

/* first recur on right child */
printInorder(node->right);

/* then print the data of node */
printf("%d ", node->data);

/* now recur on left child */
printInorder(node->left);

}

/* Given a binary tree, print its nodes in preorder*/
void printPreorder(struct node* node)
{
if (node == NULL)
return;

/* first print data of node */
printf("%d ", node->data);

/* then recur on right subtree */
printPreorder(node->right);

/* now recur on left sutree */
printPreorder(node->left);


}   

/* 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("\nPreorder traversal of binary tree is \n");
printPreorder(root);

printf("\nInorder traversal of binary tree is \n");
printInorder(root);

printf("\nPostorder traversal of binary tree is \n");
printPostorder(root);

getchar();
return 0;
}

OUTPUT:


Related Solutions

Traversal tree program in c/c++
Traversal tree program in c/c++
C program that demonstrate tree traversal. see for the sample output. Sample Output: How many node...
C program that demonstrate tree traversal. see for the sample output. Sample Output: How many node do you have in your tree : 5 Enter root: 20 if you want to add to the left press 0 otherwise press 1 answer: 0 Enter next node: 10 if you want to add to the left press 0 otherwise press 1 answer: 0 Enter next node: 8 if you want to add to the left press 0 otherwise press 1 answer: 0...
C++ tree program (do NOT use STRUCT, use classes)    Program 1 Implement a Binary tree...
C++ tree program (do NOT use STRUCT, use classes)    Program 1 Implement a Binary tree using an array    Program 2 Implement a tree using linked list - pointer Binary Tree    Program 3 - Convert program 1 to a template
Write a C++ or Java program name that conducts the BFS traversal of a graph and...
Write a C++ or Java program name that conducts the BFS traversal of a graph and displays city names in the range of hop(s) from a starting city Input format: This is a sample input from a user. 4 Monterey LA SF SD 6 Monterey LA LA SD SD Monterey SF Monterey SF LA SF SD Monterey 2 The first line (= 4 in the example) indicates that there are four vertices in the graph. The following four lines describe...
Write a program in C++ that will make changes in the list of strings by modifying...
Write a program in C++ that will make changes in the list of strings by modifying its last element. Your program should have two functions: 1. To change the last element in the list in place. That means, without taking the last element from the list and inserting a new element with the new value. 2. To compare, you need also to write a second function that will change the last element in the list by removing it first, and...
Create a Binary Search Tree for the following data and do In-order, Preorder and Post-order traversal...
Create a Binary Search Tree for the following data and do In-order, Preorder and Post-order traversal of the tree. 50, 60, 25, 40, 30, 70, 35, 10, 55, 65, 5 Write an algorithm to delete a node in Singly Linked List                            [12 Write an algorithm of Binary Search                                                              [10] Write a program in ‘C’ to generate Fibonacci series using recursion            [8]
P1. Construct the tree with post-order traversal string = i b d a h g c...
P1. Construct the tree with post-order traversal string = i b d a h g c f, and in-order traversal string = b i a d f g h c. P2. Construct the tree with pre-order traversal string = 10, 20, 40, 50, 80, 60, 70, 90, and in-order traversal string = 40, 50, 20, 10, 80, 70, 90, 60.
Write a C++ program that will make changes in the list of strings by modifying its...
Write a C++ program that will make changes in the list of strings by modifying its last element. Your program should have two functions: 1. To change the last element in the list in place. That means, without taking the last element from the list and inserting a new element with the new value. 2. To compare, you need also to write a second function that will change the last element in the list by removing it first, and inserting...
Convert the C program shown below to MIPS program. You may choose the $t registers, but...
Convert the C program shown below to MIPS program. You may choose the $t registers, but must correctly apply the $a and $v registers used in function calls. Please do not include an exit syscall in your MIPS solution. Hint: review jr and jal instructions. int fun( int a, int b ) { if ( a >= b ) return b + 2*a; else return b + a; } void main() { } int a = 10; int b =...
C++ tree program (please do NOT use struct Node, use classes) Program 1 Implement a Binary...
C++ tree program (please do NOT use struct Node, use classes) Program 1 Implement a Binary tree using an array Program 2 Implement a tree using linked list - pointer Binary Tree Program 3 - Convert program 1 to a template (include screenshots please of output)
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT