- /*Program name: Create full binary tree using its inorder and preorder
- traversal*/
- #include<iostream.h>
- #include<conio.h>
- struct node{
- struct node* left;
- struct node* right;
- int data;
- };
- struct node* root;
- //6 buildtree execution start
- void buildtree(struct node *b, int left_selected ,int* preorder, int* inorder)
- {
- int preorder_1[8] = {-1,-1,-1,-1,-1,-1,-1,-1};//7.initialize preorder_1
- int preorder_2[8] = {-1,-1,-1,-1,-1,-1,-1,-1};//8.initialize preorder_2
- int inorder_1[8] = {-1,-1,-1,-1,-1,-1,-1,-1}; //9.initialize inorder_1;
- int inorder_2[8] = {-1,-1,-1,-1,-1,-1,-1,-1}; //10.initilaize inorder_2
- int i, j, k1, k2;
- //11.creation of root node of the tree
- if(b==NULL)
- {
- root = b = new node;
- b->data = preorder[0]; //12. root node is preorder first element
- b->left = b->right = NULL; //13. root left and right is Null;
- }
- else
- {
- node* tmp = new node;
- tmp->data = preorder[0];
- tmp->left = tmp->right = NULL;
- if(left_selected)
- b->left = tmp;
- else
- b->right = tmp;
- b = tmp;
- }
- i = 0; //14. i=0;
- while(inorder[i] != preorder[0]) //15.this logic will store inorder left element with respect to preoeder node. // in inorder traversal and store it in Inorder_1.
- {
- inorder_1[i] = inorder[i];
- i++;
- }
- i++; //17 indicate the current preorder node position in inorder list
- j = 0;
- while(inorder[i] != -1 ) //18 this logic will store inorder right element with respect to preoeder node.
- {
- inorder_2[j] = inorder[i];
- j++;
- i++;
- }
- i = j = k1 = k2 = 0;
- while(preorder[i] != -1 ) //19.
- {
- i++;
- int flag = 0;
- j = 0;
- while(inorder_1[j] != -1 )
- {
- if (inorder_1[j] == preorder[i])
- {
- flag = 1;
- break;
- }
- j++;
- }
- if(flag)
- {
- preorder_1[k1] = preorder[i];
- k1++;
- }
- else
- {
- preorder_2[k2] = preorder[i];
- k2++;
- }
- }
- if(preorder_1[0] != -1)
- buildtree(b, 1, preorder_1, inorder_1);
- if(preorder_2[0] != -1)
- buildtree(b, 0, preorder_2, inorder_2);
- }
- void preorder_traversal()
- {
- int top=-1;
- struct node*stack[40],*trav;
- trav=root;
- while(1)
- {
- while(trav!=NULL)
- {
- cout<<" "<<trav->data;
- top++;
- stack[top]=trav;
- trav=trav->left;
- }
- while(top!=-1)
- {
- trav=stack[top];
- top--;
- trav=trav->right;
- while(trav!=NULL)
- {
- cout<<" "<<trav->data;
- top++;
- stack[top]=trav;
- trav=trav->left;
- }
- }
- if(top==-1)
- {
- break;
- }
- }
- }
- int main()
- {
- clrscr();
- root = NULL; //1. initialize root by null
- int preorder[] = {7,10,4,3,1,2,8,11,-1}; //2. preorder is given
- int inorder[] = {4,10,3,1,7,11,8,2,-1}; //3.inorder is given
- buildtree(root, 1 ,preorder, inorder);//4. buildtree is a function
- cout<<"\nResultant Tree is (preorder):"; //.it will print msg.
- preorder_traversal(); //. call preorder traversal
- getch();
- return 1;
- //getch();
- }
Tuesday, 8 September 2015
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment