Showing posts with label binary tree. Show all posts
Showing posts with label binary tree. Show all posts

Wednesday, 5 August 2015

Reverse alternate levels of a perfect binary tree.

Given a Perfect Binary Tree, reverse the alternate level nodes of the binary tree.


Code:
 void reverseAlternateLevelOfPrefectBTUtil(node* left,node* right,int level,int d){  
      if(left==NULL || right==NULL) return;  
      if(level%2!=0 && level==d){  
           int a= left->data;  
           int b= right->data;  
           swap(&a,&b);  
           left->data = a;  
           right->data = b;  
      }  
      reverseAlternateLevelOfPrefectBTUtil(left->left,right->right,level+1,d);  
      reverseAlternateLevelOfPrefectBTUtil(left->right,right->left,level+1,d);  
 }  
 void reverseAlternateLevelOfPrefectBT(node* root)  
 {  
      for(int i=1; i<=height(root); i+=2)  
      reverseAlternateLevelOfPrefectBTUtil(root->left,root->right,1,i);  
      cout<<"Level Order After modification\n";  
      levelorder(root);  
 }  

Binary Tree Basic Functions

 class node  
 {  
 public:  
   int data;  
   struct node *left,*right,*random;  
   bool isThreaded ;  
 };  
 node* newNode(int data)  
 {  
   node* neNode = new node;  
   neNode->data = data;  
   neNode->left = NULL;  
   neNode->right = NULL;  
   neNode->isThreaded =false;  
   return neNode;  
 }  
 void inorder(node* root)  
 {  
   if(!root) return;  
   inorder(root->left);  
   cout<<root->data<<" ";  
   inorder(root->right);  
 }  
 int height(node* root)  
 {  
   if(root==NULL) return 0;  
   int lHeight = height(root->left);  
   int rHeight = height(root->right);  
   return lHeight>rHeight?lHeight+1:rHeight+1;  
 }  
 int main()  
 {  
    node *root = newNode(1);  
   root->left = newNode(2);  
   root->right = newNode(3);  
   //root->left->left = newNode(1);  
   //root->left->right = newNode(5);  
   root->right->left = newNode(4);  
   root->right->left->left = newNode(6);  
   root->right->left->left->left = newNode(8);  
   root->right->left->left->right = newNode(9);  
   root->right->right = newNode(5);  
   //root->right->right->left = newNode(9);  
   root->right->right->right = newNode(7);  
    root->right->right->right->left = newNode(10);  
    cout<<closestLeafDistance(root,5);  
 }