private void _Torles(ref FaElem p, K kulcs) { if (p != null) { if (p.kulcs.CompareTo(kulcs) > 0) { _Torles(ref p.bal, kulcs); } else if (p.kulcs.CompareTo(kulcs) < 0) { _Torles(ref p.jobb, kulcs); } else if (p.bal == null) { FaElem q = p; p = p.jobb; } else if (p.jobb == null) { FaElem q = p; p = p.bal; } else { TorlesKetGyerek(p, ref p.bal); } } else { throw new ArgumentException("Nincs ilyen elem"); } }
private T _Kereses(FaElem p, K kulcs) { if (p != null) { if (p.kulcs.CompareTo(kulcs) < 0) { //jobb return(_Kereses(p.jobb, kulcs)); } else if (p.kulcs.CompareTo(kulcs) > 0) { //bal return(_Kereses(p.bal, kulcs)); } else { //kulcs egyenlő a miénkkel return(p.tartalom); } } else { throw new ArgumentException("Nincs ilyen elem a fában!"); } }
private void _Beszuras(ref FaElem p, T tartalom, K kulcs) { if (p == null) { p = new FaElem(); p.tartalom = tartalom; p.kulcs = kulcs; } else { if (p.kulcs.CompareTo(kulcs) < 0) { //jobb részfába szúrunk be _Beszuras(ref p.jobb, tartalom, kulcs); } else if (p.kulcs.CompareTo(kulcs) > 0) { //bal részfába szúrunk be _Beszuras(ref p.bal, tartalom, kulcs); } else { throw new ArgumentException("Van már ilyen kulcsú elem a fában!"); } } }
void ResztBejar(FaElem gyok, ref int idx, IMemoriabanTarolhato[] res) { if (gyok != null) { res[idx++] = gyok.tartalom; ResztBejar(gyok.bal, ref idx, res); ResztBejar(gyok.jobb, ref idx, res); } }
private void _PostOrderBejaras(List <T> lista, FaElem p) { if (p != null) { _PostOrderBejaras(lista, p.bal); _PostOrderBejaras(lista, p.jobb); lista.Add(p.tartalom); } }
private void TorlesKetGyerek(FaElem e, ref FaElem r) { if (r.jobb != null) { TorlesKetGyerek(e, ref r.jobb); } else { e.tartalom = r.tartalom; e.kulcs = r.kulcs; FaElem q = r; r = r.bal; } }
public void Beszuras(IMemoriabanTarolhato uj) { FaElem tmp = new FaElem(); tmp.tartalom = uj; tmp.kulcs = uj.X * 1000 + uj.Y; if (meret > 0) { FaElem akt = gyoker; bool megvan = false; bool marBenneVan = false; while (!megvan && !marBenneVan) { if (tmp.kulcs != akt.kulcs) if (tmp.kulcs < akt.kulcs) { if (akt.bal == null) megvan = true; else akt = akt.bal; } else { if (akt.jobb == null) megvan = true; else akt = akt.jobb; } else marBenneVan = true; } if (!marBenneVan) { if (tmp.kulcs < akt.kulcs) akt.bal = tmp; else akt.jobb = tmp; meret++; if (uj is IMemoriabanTarolhatoEsMegszuno) (uj as IMemoriabanTarolhatoEsMegszuno).Megszunes += Torles; } } else { gyoker = tmp; if (uj is IMemoriabanTarolhatoEsMegszuno) (uj as IMemoriabanTarolhatoEsMegszuno).Megszunes += Torles; meret++; } }
public void Torles(IMemoriabanTarolhato torolni) { if (meret > 0) { int k = torolni.X * 1000 + torolni.Y; bool megvan = false; bool nincsBenne = false; FaElem akt = gyoker; FaElem szulo = gyoker; while (!megvan && !nincsBenne) { if (akt.kulcs == k) { megvan = true; } else if (akt.kulcs > k) { if (akt.bal != null) { szulo = akt; akt = akt.bal; } else { nincsBenne = true; } } else { if (akt.jobb != null) { szulo = akt; akt = akt.jobb; } else { nincsBenne = true; } } } if (megvan) { FaElem torlendo = akt; if (szulo.bal == torlendo) { if (torlendo.bal != null) { szulo.bal = torlendo.bal; } if (torlendo.jobb != null) { if (szulo.bal == torlendo && torlendo.jobb.kulcs < szulo.kulcs) { szulo.bal = torlendo.jobb; } else { akt = szulo.jobb; bool siker = false; while (!siker) { if (akt.kulcs > torlendo.jobb.kulcs) { if (akt.bal == null) { akt.bal = torlendo.jobb; siker = true; } else { akt = akt.bal; } } else { if (akt.jobb == null) { akt.jobb = torlendo.jobb; siker = true; } else { akt = akt.jobb; } } } } } } else { if (torlendo.jobb != null) { szulo.jobb = torlendo.jobb; } if (torlendo.bal != null) { if (szulo.jobb == torlendo && torlendo.bal.kulcs > szulo.kulcs) { szulo.jobb = torlendo.bal; } else { akt = szulo.bal; bool siker = false; while (!siker) { if (akt.kulcs > torlendo.bal.kulcs) { if (akt.bal == null) { akt.bal = torlendo.bal; siker = true; } else { akt = akt.bal; } } else { if (akt.jobb == null) { akt.jobb = torlendo.bal; siker = true; } else { akt = akt.jobb; } } } } } } } if (nincsBenne) { throw new FabolTorlesSikertelen(); } } }
public void Beszuras(IMemoriabanTarolhato uj) { FaElem tmp = new FaElem(); tmp.tartalom = uj; tmp.kulcs = uj.X * 1000 + uj.Y; if (meret > 0) { FaElem akt = gyoker; bool megvan = false; bool marBenneVan = false; while (!megvan && !marBenneVan) { if (tmp.kulcs != akt.kulcs) { if (tmp.kulcs < akt.kulcs) { if (akt.bal == null) { megvan = true; } else { akt = akt.bal; } } else { if (akt.jobb == null) { megvan = true; } else { akt = akt.jobb; } } } else { marBenneVan = true; } } if (!marBenneVan) { if (tmp.kulcs < akt.kulcs) { akt.bal = tmp; } else { akt.jobb = tmp; } meret++; if (uj is IMemoriabanTarolhatoEsMegszuno) { (uj as IMemoriabanTarolhatoEsMegszuno).Megszunes += Torles; } } } else { gyoker = tmp; if (uj is IMemoriabanTarolhatoEsMegszuno) { (uj as IMemoriabanTarolhatoEsMegszuno).Megszunes += Torles; } meret++; } }