//agacOlustur metodu ile aşağıdaki şartları sağlayan bir ağaç oluşturuyoruz: public void agacOlustur(dugum ebeveyn, int satır) { //agacın ilk satırında sadece kök bulunur //ikinci satırda kökün sol(siyah) ve sağ(beyaz) çocukları bulunabilir. //ikinci satırdaki çocukların da üçüncü satırda sol ve sağ çocukları bulunabilir //bu şekilde kaç basamak isteniyorsa o kadar satır eklenir if (satır < basamak) { if (ebeveyn.sol == null && ebeveyn.renk == "beyaz") { //mevcut düğüm beyazsa sol çocuğu siyah, sağ çocuğu beyaz olur dugum siyah = new dugum("siyah"); ebeveyn.sol = siyah; //yeni satır oluşturmak için recursive olarak //satır sayısı arttırılıp fonksiyon tekrar çağrılır. //istenilen satıra(yani basamağa) ulaşılmışsa else içindeki sayaç durumu bir artar. agacOlustur(ebeveyn.sol, satır + 1); } if (ebeveyn.sag == null) { //mevcut düğüm siyahsa sol çocuğu olmaz(çünkü iki siyah ardarda gelmemelidir, //sağ çocuğu beyaz olur dugum beyaz = new dugum("beyaz"); ebeveyn.sag = beyaz; //yeni satır oluşturmak için recursive olarak //satır sayısı arttırılıp fonksiyon tekrar çağrılır. //istenilen satıra(yani basamağa) ulaşılmışsa else içindeki sayaç durumu bir artar. agacOlustur(ebeveyn.sag, satır + 1); } } else { sayac++; } }
private void hesaplaBtn_Click(object sender, EventArgs e) { try { int basamak = Convert.ToInt32(basamakTxt.Text); if (basamak <= 0) { MessageBox.Show("pozitif tamsayı değeri giriniz!"); } else { dugum beyaz = new dugum("beyaz"); agac agacim = new agac(beyaz, basamak); agacim.agacOlustur(beyaz, 1); MessageBox.Show(agacim.sayac.ToString() + " tane sıralama vardır."); } } catch (Exception) { MessageBox.Show("yanlış alan girişi!"); } }
public agac(dugum kokVer, int basamak) { this.basamak = basamak; this.kok = kokVer; sayac = 0; }