Browse Source

avl_tree: fixing insertion (no test so far)

undefined
Guillaume Bittoun Sam Hocevar <sam@hocevar.net> 11 years ago
parent
commit
f318af9b03
1 changed files with 16 additions and 6 deletions
  1. +16
    -6
      src/lol/base/avl_tree.h

+ 16
- 6
src/lol/base/avl_tree.h View File

@@ -141,22 +141,32 @@ private:
this->m_lo->m_hi = this; this->m_lo->m_hi = this;
this->m_lo = lo_hi; this->m_lo = lo_hi;


// TODO : Rebalance
this->compute_balance();
lo_hi->compute_balance();


return lo; return lo;
} }
else // rotation == CCW else // rotation == CCW
{ {
tree_node * lo = this->m_lo;
tree_node * lo_hi = this->m_lo->m_hi;
tree_node * hi = this->m_hi;
tree_node * hi_lo = this->m_hi->m_lo;


this->m_lo->m_hi = this;
this->m_lo = lo_hi;
this->m_hi->m_lo = this;
this->m_hi = hi_lo;


// TODO : Rebalance
this->compute_balance();
hi_lo->compute_balance();


return lo; return lo;
} }

return 0;
}

void compute_balance()
{
this->m_stairs_lo = this->m_lo ? this->m_lo->m_stairs_lo + this->m_lo->m_stairs_hi : 0;
this->m_stairs_hi = this->m_hi ? this->m_hi->m_stairs_lo + this->m_lo->m_stairs_hi : 0;
} }


private: private:


Loading…
Cancel
Save