Max-Heapify Un arbre binaire

C'est l'une des questions pour l'interview j'ai récemment est venu à travers.

Compte tenu de la racine de l'adresse complète ou presque complète arbre binaire, nous devons écrire une fonction pour convertir l'arbre jusqu'à un max-heap.

Il n'y a pas de tableaux en cause ici. L'arbre est déjà construit.

Pour, par exemple,

              1   
         /        \
        2           5
      /  \       /  \ 
     3      4    6     7

peut avoir les éventuelles max tas comme la sortie--

              7   
         /        \
        3           6
      /  \       /  \ 
     2     1     4     5

ou

              7   
         /        \
        4           6
      /  \       /  \ 
     2     3     1     5

etc...

J'ai écrit une solution, mais en utilisant une combinaison de pré-et post-ordre traversals mais qui, je pense, s'exécute en O(n^2). Mon code donne le résultat suivant.

              7   
         /        \
        3           6
      /  \       /  \ 
     1     2     4     5

J'étais à la recherche d'une meilleure solution. Quelqu'un peut-il aider s'il vous plaît?

Edit :

Mon Code

void preorder(struct node* root)
{    
    if(root==NULL)return;
    max_heapify(root,NULL);
    preorder(root->left); 
    preorder(root->right);
}
void max_heapify(struct node* root,struct node* prev)
{
    if(root==NULL)
        return ;             
    max_heapify(root->left,root);
    max_heapify(root->right,root);
    if(prev!=NULL && root->data > prev->data)
    {
        swapper(root,prev);
    }     
}
void swapper(struct node* node1, struct node* node2)
{   
    int temp= node1->data;
    node1->data = node2->data;
    node2->data = temp;
}

source d'informationauteur ankitG