Advertisement
Thiagofsr

Questao 19

May 8th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. bool IsAVL(tBinTree tree){
  2.     int fb = 0;
  3.  
  4.     // Verificando se os nos esquerdo e direito da arvores estao vazios ou nao.
  5.     bool isRightNULL = tree->right == NULL;
  6.     bool isLeftNULL = tree->left == NULL;
  7.  
  8.     // Caso ambos existam, calcule o fator de balanceamento.
  9.     if(!isRightNULL && !isLeftNULL)
  10.         fb = tree->right->height() - tree->left->height();
  11.  
  12.     //Caso ambos n existam, descubra quem existe e considere a altura do outro como sendo 0;
  13.  
  14.         //Caso apenas o lado direito exista, o fator de balanceamento eh sua altura positiva.
  15.     else if(!isRightNULL)
  16.         fb = tree->right->height();
  17.  
  18.         //Caso apenas o lado esquero exista, o fator de balanceamento eh sua altura negativa.
  19.     else
  20.         fb = tree->left->height() * -1;
  21.  
  22.     //verifique a condiçao de uma arvore balanceada e retorne true caso ele n seja aceita
  23.     if(abs(fb)>1)
  24.         return true;
  25.  
  26.     //O fato da raiz de uma subarvore estar balanceada, n significa q a arvore completa esteja
  27.     //Ai que entra a recursividade, afim de encontrar algum desbalanceamento
  28.  
  29.     if(!isRightNULL) {
  30.         if (IsAVL(tree->right))
  31.             return true;
  32.     }
  33.  
  34.     if(!isLeftNULL)
  35.         return IsAVL(tree->left);
  36.  
  37.     //Caso apos passar por todas as verificacoes n foi encontrado desbalanceamento, retorne false.
  38.  
  39.     return false;
  40.  
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement