Language: EN FI

Tehtävät > Rotaatio

Nämä tehtävät ovat esimerkkjä ByTheMark-palvelusta löytyvästä oppimateriaalista. Ne on tarkoitettu itseopiskeluun. Jos haluat lisää tehtäviä tai seurata omaa edistymistäsi, luo ByTheMark Personal-demotunnus. ByTheMark Personal on maksuton yksityisille henkilöille tarkoitettu palvelu tietorakenteiden ja algoritmien opiskeluun.

Alla oleva AVL-puu on epätasapainossa viimeisen lisäyksen jälkeen (mallivastauksessa on tilat ennen lisäystä ja lisäyksen jälkeen). Tasapainota puu tekemällä rotaatio. Katso lisätietoa Ohje-sivulta.

// Solmu p on epätasapainossa ja sen isäsolmu on f
if (f->left == p) {
  if (height(p.left) > height(p.right)) {
    f->left = p->left;  // single rotation right
    p->left = f->left->right;
    f->left->right = p;
  } else { // height(p.left) < height(p.right)
    f->left = p->right; // single rotation left
    p->right = f->left->left;
    f->left->left = p;
  }
} else { // f->right == p
  if (height(p.left) < height(p.right)) {
    f->right = p->right; // single rotation left
    p->right = f->right->left;
    f->right->left = p;
  } else { // height(p.left) > height(p.right)
    f->right = p->left;  // single rotation right
    p->left = f->right->right;
    f->right->right = p;  
  }
}

  Last modified Tue Mar 01 20:54:04 EET 2011