public int YaprakSayisi(İkiliAramaAgacDugumu dugum)
        {
            int count = 0;

            if (dugum != null)
            {
                if ((dugum.sol == null) && (dugum.sag == null))
                {
                    count = 1;
                    geciciyukseklik++;
                    if (geciciyukseklik > yukseklik)
                    {
                        yukseklik = geciciyukseklik;
                    }
                    geciciyukseklik = -1;
                }

                else
                {
                    geciciyukseklik++;
                    count = count + YaprakSayisi(dugum.sol) + YaprakSayisi(dugum.sag);
                }
            }
            return(count);
        }
 public İkiliAramaAgacDugumu(string veri, ulong id)
 {
     this.veri = veri;
     sol       = null;
     sag       = null;
     this.id   = id;
 }
 private void PreOrderInt(İkiliAramaAgacDugumu dugum)
 {
     if (dugum == null)
     {
         return;
     }
     Ziyaret(dugum);
     PreOrderInt(dugum.sol);
     PreOrderInt(dugum.sag);
 }
        public İkiliAramaAgacDugumu MaksDeger()
        {
            İkiliAramaAgacDugumu tempSag = kok;

            while (tempSag.sag != null)
            {
                tempSag = tempSag.sag;
            }
            return(tempSag);
        }
        public İkiliAramaAgacDugumu MinDeger()
        {
            İkiliAramaAgacDugumu tempSol = kok;

            while (tempSol.sol != null)
            {
                tempSol = tempSol.sol;
            }
            return(tempSol);
        }
        public int DugumSayisi(İkiliAramaAgacDugumu dugum)
        {
            int count = 0;

            if (dugum != null)
            {
                count  = 1;
                count += DugumSayisi(dugum.sol);
                count += DugumSayisi(dugum.sag);
            }
            return(count);
        }
        private İkiliAramaAgacDugumu Successor(İkiliAramaAgacDugumu silDugum)
        {
            İkiliAramaAgacDugumu successorParent = silDugum;
            İkiliAramaAgacDugumu successor       = silDugum;
            İkiliAramaAgacDugumu current         = silDugum.sag;

            while (current != null)
            {
                successorParent = successor;
                successor       = current;
                current         = current.sol;
            }
            if (successor != silDugum.sag)
            {
                successorParent.sol = successor.sag;
                successor.sag       = silDugum.sag;
            }
            return(successor);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            int j = 0;

            string[] kategoriler      = { "Bilgisayar", "Beyaz Eşya", "Giyim", "Kırtasiye & Ofis", "Yapı Market", "Bahçe", "Tekstil", "Yiyecek" };
            string[] urunadlari       = { "Dizüstü Bilgisayar", "Masaüstü Bilgisayar", "Buzdolabı", "Çamaşır Makinası", "Gömlek", "Takım Elbise", "Kalem", "Defter", "Boya", "El Aletleri", "Bahçe Sandalyeleri", "Bahçe Takımları", "Perde", "Yorgan", "Et Ürünleri", "Süt Ürünleri" };
            string[] urunmarkalari    = { "Asus", "Monster", "Beko", "Bosch", "Altınyıldız", "Pierre Cardin", "Faber Castel", "GIPTA", "Marshall", "Stanley", "Comfort", "Sunfun", "Taç", "Karaca", "Emin", "Pınar" };
            string[] urunmodel        = { "ROG", "ABRA", "B9470", "WAT24480TR", "TAİLORED", "G021GL001.BOSTON.53252.VR033", "Grip", "Quadro", "Mat Silikon", "STDC18LHBK", "Begonya", "Orkide", "Beşiktaşlı", "Real Madridli", "Kuşbaşı", "Peynir" };
            int[]    urunmikar        = { 5, 15, 7, 2, 35, 4, 7, 12, 14, 21, 23, 2, 1, 31, 14, 17 };
            int[]    urunmaliyet      = { 2200, 1200, 250, 450, 20, 150, 14, 10, 15, 100, 35, 140, 25, 40, 14, 7 };
            int[]    urunsatisfiyati  = { 5500, 6000, 1000, 1100, 35, 450, 30, 15, 30, 250, 75, 300, 35, 90, 30, 15 };
            string[] urunaciklamalari = { "Intel Core i7 7700HQ 8GB 1TB + 128GB SSD GTX1050Ti Freedos 15.6 FHD Taşınabilir Bilgisayar", "Intel Core i7 7700HQ 8GB 1TB GTX1050Ti Freedos 15.6 FHD Masaüstü Bilgisayar", "9480 KM Neo Frost Buzdolabı", "9 KG 1200 DEVİR A+++ ENERJİ BEYAZ ÇAMAŞIR MAKİNA", "%55 Pamuk, %45 Polyester, Siyah, Klasik Model, Regular Fit", "Asetat : %59 Yun : % 41 Mono Yaka ", "0.7mm Versatil Kalem", " A4 140 Yp. Deri Kapak Spiralli Defter", "İç Cephe Boya 7.5 Lt", "18Volt/2,0Ah Li-ion Çift Akülü Profesyonel Darbeli Matkap", "Üretiminde cam elyaflı hammadde kullanılmıştır", "1 adet camlı masa: 160x90x75 cm 4 adet sandalye: 55x48x92 cm", "Beşiktaş Zebra Perde (Siyah/Beyaz) - 220x260 cm", "Microfiber Yorgan 115x225 cm", "1kg kuzu kuşbaşı", "500gr beyaz peynir" };
            cmbUyeOlCinsiyet.SelectedIndex = 0;
            for (int i = 0; i < 8; i++)
            {
                İkiliAramaAgacDugumu d  = new İkiliAramaAgacDugumu();
                İkiliAramaAgacDugumu d2 = new İkiliAramaAgacDugumu();
                Urun     u  = new Urun();
                Urun     u2 = new Urun();
                Kategori k  = new Kategori();
                u.UrunAdi      = urunadlari[j];
                u.Marka        = urunmarkalari[j];
                u.Model        = urunmodel[j];
                u.Miktar       = urunmikar[j];
                u.Maliyet      = urunmaliyet[j];
                u.SatisFiyati  = urunsatisfiyati[j];
                u.Aciklaması   = urunaciklamalari[j];
                u2.UrunAdi     = urunadlari[j + 1];
                u2.Marka       = urunmarkalari[j + 1];
                u2.Model       = urunmodel[j + 1];
                u2.Miktar      = urunmikar[j + 1];
                u2.Maliyet     = urunmaliyet[j + 1];
                u2.SatisFiyati = urunsatisfiyati[j + 1];
                u2.Aciklaması  = urunaciklamalari[j + 1];
                k.KategoriIsmi = kategoriler[i];
                k.Agac.Ekle(urunadlari[j]);
                k.Agac.Ara(urunadlari[j]).Urunler.Add(u);
                k.Agac.Ekle(urunadlari[j + 1]);
                k.Agac.Ara(urunadlari[j + 1]).Urunler.Add(u2);
                market.KategoriEkle(k);
                j += 2;
            }
        }
        private İkiliAramaAgacDugumu AraInt(İkiliAramaAgacDugumu dugum,
                                            string anahtar)
        {
            ulong x = IdOlustur(anahtar);

            if (dugum == null)
            {
                return(null);
            }
            else if (dugum.id == x)
            {
                return(dugum);
            }
            else if (dugum.id > x)
            {
                return(AraInt(dugum.sol, anahtar));
            }
            else
            {
                return(AraInt(dugum.sag, anahtar));
            }
        }
        public void Ekle(string deger)
        {
            ulong tempId = IdOlustur(deger);
            İkiliAramaAgacDugumu tempParent = new İkiliAramaAgacDugumu();
            İkiliAramaAgacDugumu tempSearch = kok;

            while (tempSearch != null)
            {
                tempParent = tempSearch;
                if (tempId == tempSearch.id)
                {
                    return;
                }
                else if (tempId < tempSearch.id)
                {
                    tempSearch = tempSearch.sol;
                }
                else
                {
                    tempSearch = tempSearch.sag;
                }
            }
            İkiliAramaAgacDugumu eklenecek = new İkiliAramaAgacDugumu(deger, tempId);

            //Ağaç boş, köke ekle
            if (kok == null)
            {
                kok = eklenecek;
            }
            else if (tempId < tempParent.id)
            {
                tempParent.sol = eklenecek;
            }
            else
            {
                tempParent.sag = eklenecek;
            }
        }
        private void button4_Click(object sender, EventArgs e)
        {
            bool kontrol = false;
            İkiliAramaAgacDugumu temp = new İkiliAramaAgacDugumu();

            foreach (Kategori k in Form1.market.Kategoriler)
            {
                if (k.Agac.Ara(txtKategoriGüncelle.Text) != null)
                {
                    temp.veri    = k.Agac.Ara(txtKategoriGüncelle.Text).veri;
                    temp.Urunler = k.Agac.Ara(txtKategoriGüncelle.Text).Urunler;
                    k.Agac.Sil(txtKategoriGüncelle.Text);
                }
            }
            foreach (Kategori k in Form1.market.Kategoriler)
            {
                if (comboBox1.Text == k.KategoriIsmi)
                {
                    k.Agac.Ekle(temp.veri);
                    foreach (Urun u in temp.Urunler)
                    {
                        kontrol = true;
                        k.Agac.Ara(temp.veri).Urunler.Add(u);
                    }
                    if (kontrol == true)
                    {
                        MessageBox.Show("Kategori Başarıyla Güncellenmiştir...");
                    }
                    else
                    {
                        MessageBox.Show("Güncelleme Başarısız Oldu..!");
                    }
                }
            }
            txtKategoriGüncelle.Clear();
        }
        public bool Sil(string deger)
        {
            ulong x = IdOlustur(deger);
            İkiliAramaAgacDugumu current = kok;
            İkiliAramaAgacDugumu parent  = kok;
            bool issol = true;

            //DÜĞÜMÜ BUL
            while (current.id != x)
            {
                parent = current;
                if (x < current.id)
                {
                    issol   = true;
                    current = current.sol;
                }
                else
                {
                    issol   = false;
                    current = current.sag;
                }
                if (current == null)
                {
                    return(false);
                }
            }
            //DURUM 1: YAPRAK DÜĞÜM
            if (current.sol == null && current.sag == null)
            {
                if (current == kok)
                {
                    kok = null;
                }
                else if (issol)
                {
                    parent.sol = null;
                }
                else
                {
                    parent.sag = null;
                }
            }
            //DURUM 2: TEK ÇOCUKLU DÜĞÜM
            else if (current.sag == null)
            {
                if (current == kok)
                {
                    kok = current.sol;
                }
                else if (issol)
                {
                    parent.sol = current.sol;
                }
                else
                {
                    parent.sag = current.sol;
                }
            }
            else if (current.sol == null)
            {
                if (current == kok)
                {
                    kok = current.sag;
                }
                else if (issol)
                {
                    parent.sol = current.sag;
                }
                else
                {
                    parent.sag = current.sag;
                }
            }
            //DURUM 3: İKİ ÇOCUKLU DÜĞÜM
            else
            {
                İkiliAramaAgacDugumu successor = Successor(current);
                if (current == kok)
                {
                    kok = successor;
                }
                else if (issol)
                {
                    parent.sol = successor;
                }
                else
                {
                    parent.sag = successor;
                }
                successor.sol = current.sol;
            }
            return(true);
        }
 public İkiliAramaAgaci(İkiliAramaAgacDugumu kok)
 {
     this.kok = kok;
 }
 private void Ziyaret(İkiliAramaAgacDugumu dugum)
 {
     dugumler.Add(dugum);
 }