public Sonuc KokOperasyonYiliIcinUcYaprakBul(List <Hasta> hastalar, string bolumleme, Sonuc sonuc)
        {
            sonuc.KokDugum = "Operasyon Yılı";

            int yilBolumlemeSayisi    = hastalar.Where(each => each.OperasyonYili == bolumleme).Count();
            int yilIcinDurumBirSayisi = hastalar.Where(each => each.Durum == 1 && each.OperasyonYili == bolumleme).Count();
            int yilIcinDurumIkiSayisi = hastalar.Where(each => each.Durum == 2 && each.OperasyonYili == bolumleme).Count();

            double yilIcinDurumBirOlasilik = Convert.ToDouble(yilIcinDurumBirSayisi) / Convert.ToDouble(yilBolumlemeSayisi);
            double yilIcinDurumIkiOlasilik = Convert.ToDouble(yilIcinDurumIkiSayisi) / Convert.ToDouble(yilBolumlemeSayisi);
            double H_Yil_Entropi           = EntropiHesapla(yilIcinDurumBirOlasilik, yilIcinDurumIkiOlasilik);

            /*---------------------------------------------------------------------------------------------------------------------------*/

            int yilIcinDugumSayisiKucukSayisi         = hastalar.Where(each => each.OperasyonYili == bolumleme && each.DugumSayisi == "K").Count();
            int yilIcinDugumSayisiBuyukSayisi         = hastalar.Where(each => each.OperasyonYili == bolumleme && each.DugumSayisi == "B").Count();
            int yilIcinDugumSayisiKucukDurumBirSayisi = hastalar.Where(each => each.Durum == 1 && each.OperasyonYili == bolumleme && each.DugumSayisi == "K").Count();
            int yilIcinDugumSayisiKucukDurumIkiSayisi = hastalar.Where(each => each.Durum == 2 && each.OperasyonYili == bolumleme && each.DugumSayisi == "K").Count();
            int yilIcinDugumSayisiBuyukDurumBirSayisi = hastalar.Where(each => each.Durum == 1 && each.OperasyonYili == bolumleme && each.DugumSayisi == "B").Count();
            int yilIcinDugumSayisiBuyukDurumIkiSayisi = hastalar.Where(each => each.Durum == 2 && each.OperasyonYili == bolumleme && each.DugumSayisi == "B").Count();

            decimal yilIcinDugumKazanc = KazancHesapla(yilIcinDugumSayisiKucukDurumBirSayisi, yilIcinDugumSayisiKucukDurumIkiSayisi, yilIcinDugumSayisiKucukSayisi, yilIcinDugumSayisiBuyukDurumBirSayisi, yilIcinDugumSayisiBuyukDurumIkiSayisi, yilIcinDugumSayisiBuyukSayisi, yilBolumlemeSayisi, H_Yil_Entropi);

            /*---------------------------------------------------------------------------------------------------------------------------*/

            int yilIcinYasKucukSayisi         = hastalar.Where(each => each.OperasyonYili == bolumleme && each.Yas == "K").Count();
            int yilIcinYasBuyukSayisi         = hastalar.Where(each => each.OperasyonYili == bolumleme && each.Yas == "B").Count();
            int yilIcinYasKucukDurumBirSayisi = hastalar.Where(each => each.Durum == 1 && each.OperasyonYili == bolumleme && each.Yas == "K").Count();
            int yilIcinYasKucukDurumIkiSayisi = hastalar.Where(each => each.Durum == 2 && each.OperasyonYili == bolumleme && each.Yas == "K").Count();
            int yilIcinYasBuyukDurumBirSayisi = hastalar.Where(each => each.Durum == 1 && each.OperasyonYili == bolumleme && each.Yas == "B").Count();
            int yilIcinYasBuyukDurumIkiSayisi = hastalar.Where(each => each.Durum == 2 && each.OperasyonYili == bolumleme && each.Yas == "B").Count();

            decimal yilIcinYasKazanc = KazancHesapla(yilIcinYasKucukDurumBirSayisi, yilIcinYasKucukDurumIkiSayisi, yilIcinYasKucukSayisi, yilIcinYasBuyukDurumBirSayisi, yilIcinYasBuyukDurumIkiSayisi, yilIcinYasBuyukSayisi, yilBolumlemeSayisi, H_Yil_Entropi);

            if (yilIcinDugumKazanc > yilIcinYasKazanc)
            {
                if (bolumleme == "K")
                {
                    sonuc.UcYaprakSol = "Dugum";
                    SolUcYaprakIcinDurumBelirleme(yilIcinDugumSayisiKucukDurumBirSayisi, yilIcinDugumSayisiKucukDurumIkiSayisi, yilIcinDugumSayisiBuyukDurumBirSayisi, yilIcinDugumSayisiBuyukDurumIkiSayisi, sonuc);
                }
                else
                {
                    sonuc.UcYaprakSag = "Dugum";
                    SagUcYaprakIcinDurumBelirleme(yilIcinDugumSayisiKucukDurumBirSayisi, yilIcinDugumSayisiKucukDurumIkiSayisi, yilIcinDugumSayisiBuyukDurumBirSayisi, yilIcinDugumSayisiBuyukDurumIkiSayisi, sonuc);
                }
            }
            else
            {
                if (bolumleme == "K")
                {
                    sonuc.UcYaprakSol = "Yas";
                    SolUcYaprakIcinDurumBelirleme(yilIcinYasKucukDurumBirSayisi, yilIcinYasKucukDurumIkiSayisi, yilIcinYasBuyukDurumBirSayisi, yilIcinYasBuyukDurumIkiSayisi, sonuc);
                }
                else
                {
                    sonuc.UcYaprakSag = "Yas";
                    SagUcYaprakIcinDurumBelirleme(yilIcinYasKucukDurumBirSayisi, yilIcinYasKucukDurumIkiSayisi, yilIcinYasBuyukDurumBirSayisi, yilIcinYasBuyukDurumIkiSayisi, sonuc);
                }
            }

            return(sonuc);
        }
        public void SagUcYaprakIcinDurumBelirleme(int kucukDurumBirSayisi, int kucukDurumIkiSayisi, int buyukDurumBirSayisi, int buyukDurumIkiSayisi, Sonuc sonuc)
        {
            if (kucukDurumBirSayisi > kucukDurumIkiSayisi)
            {
                sonuc.UcYaprakSagDurumSol = "1";
            }
            else
            {
                sonuc.UcYaprakSagDurumSol = "2";
            }

            if (buyukDurumBirSayisi > buyukDurumIkiSayisi)
            {
                sonuc.UcYaprakSagDurumSag = "1";
            }
            else
            {
                sonuc.UcYaprakSagDurumSag = "2";
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            List <Hasta> hastalar = HastalariGetir();

            List <int> yasBolumlemeListesi = new List <int> {
                50, 60, 70
            };
            List <int> yilBolumlemeListesi = new List <int> {
                62, 63, 64
            };
            List <int> dugumBolumlemeListesi = new List <int> {
                5, 10, 19
            };

            int durumBirSayisi = hastalar.Where(each => each.Durum == 1).Count();                       //Linq //Durumu 1 olan kayıtların sayısı

            int durumIkiSayisi = hastalar.Where(each => each.Durum == 2).Count();                       //Durumu 2 olan kayıtların sayısı

            int kayitSayisi = hastalar.Count();                                                         //Bütün hastaların sayısı

            double durumBirOlasilik = Convert.ToDouble(durumBirSayisi) / Convert.ToDouble(kayitSayisi); //Durumu 1 olan kayıtların olasılık hesabı

            double durumIkiOlasilik = Convert.ToDouble(durumIkiSayisi) / Convert.ToDouble(kayitSayisi); //Durumu 2 olan kayıtların olasılık hesabı

            double H_Durum = EntropiHesapla(durumBirOlasilik, durumIkiOlasilik);                        //Entropi hesaplıyorum.

            decimal enBuyukYasKazanc  = 0;
            double  yasEnIyiBolumleme = 0;

            foreach (int item in yasBolumlemeListesi) //Hastanın yaşı için en iyi bölümleme hangisi onu seçiyoruz.
            {
                foreach (Hasta hasta in hastalar)
                {
                    if (Convert.ToInt32(hasta.Yas) >= item)
                    {
                        hasta.Yas = "B"; //Büyük eşit
                    }
                    else
                    {
                        hasta.Yas = "K"; //Kucuk
                    }
                }

                decimal yasKazanc = YasKazancHesaplama(hastalar, H_Durum); //Yaş için kazanç hesaplama işlemi yapar.

                if (yasKazanc > enBuyukYasKazanc)
                {
                    enBuyukYasKazanc  = yasKazanc;
                    yasEnIyiBolumleme = item;
                }

                hastalar = HastalariGetir(); //Listeyi tekrar eski haline getirmek gerekiyor. Yoksa tekrar kontrol yaparken patlar.
            }

            decimal enBuyukYilKazanc  = 0;
            double  yilEnIyiBolumleme = 0;

            foreach (int item in yilBolumlemeListesi) //Hastanın operasyon(ameliyat) yılı için en iyi bölümleme hangisi onu seçiyoruz.
            {
                foreach (Hasta hasta in hastalar)
                {
                    if (Convert.ToInt32(hasta.OperasyonYili) >= item)
                    {
                        hasta.OperasyonYili = "B"; //Büyük eşit
                    }
                    else
                    {
                        hasta.OperasyonYili = "K"; //Kucuk
                    }
                }

                decimal yilKazanc = YilKazancHesaplama(hastalar, H_Durum);

                if (yilKazanc > enBuyukYilKazanc)
                {
                    enBuyukYilKazanc  = yilKazanc;
                    yilEnIyiBolumleme = item;
                }

                hastalar = HastalariGetir();
            }

            decimal enBuyukDugumKazanc  = 0;
            double  dugumEnIyiBolumleme = 0;

            foreach (int item in dugumBolumlemeListesi)  //Hastanın düğüm sayısı (hastalık sayısı) için en iyi bölümleme hangisi onu seçiyoruz.
            {
                foreach (Hasta hasta in hastalar)
                {
                    if (Convert.ToInt32(hasta.DugumSayisi) >= item)
                    {
                        hasta.DugumSayisi = "B"; //Büyük eşit
                    }
                    else
                    {
                        hasta.DugumSayisi = "K"; //Kucuk
                    }
                }

                decimal dugumKazanc = DugumKazancHesaplama(hastalar, H_Durum);

                if (dugumKazanc > enBuyukDugumKazanc)
                {
                    enBuyukDugumKazanc  = dugumKazanc;
                    dugumEnIyiBolumleme = item;
                }

                hastalar = HastalariGetir();
            }

            /*-----------------En iyi bölümlemelere göre Küçük/Büyük bölümlemesi yapılır.---------------------------*/

            foreach (Hasta hasta in hastalar)
            {
                if (Convert.ToInt32(hasta.Yas) >= yasEnIyiBolumleme)
                {
                    hasta.Yas = "B"; //Büyük eşit
                }
                else
                {
                    hasta.Yas = "K"; //Kucuk
                }

                if (Convert.ToInt32(hasta.OperasyonYili) >= yilEnIyiBolumleme)
                {
                    hasta.OperasyonYili = "B"; //Büyük eşit
                }
                else
                {
                    hasta.OperasyonYili = "K"; //Kucuk
                }

                if (Convert.ToInt32(hasta.DugumSayisi) >= dugumEnIyiBolumleme)
                {
                    hasta.DugumSayisi = "B"; //Büyük eşit
                }
                else
                {
                    hasta.DugumSayisi = "K"; //Kucuk
                }
            }

            /*-------------------------Kök düğümü(En tepedekini) hesapladık------------------------------------*/

            List <decimal> kazanclar = new List <decimal>
            {
                enBuyukYasKazanc, enBuyukYilKazanc, enBuyukDugumKazanc
            };

            decimal enBuyukKazanc = EnBuyukKazancBul(kazanclar);

            /*-------------------------Uç yaprakları hesaplayacağız------------------------------------*/

            List <string> bolumlemeler = new List <string> {
                "K", "B"
            };

            Sonuc sonuc = new Sonuc();

            Parallel.ForEach(bolumlemeler, bolumleme =>
            {
                if (enBuyukKazanc == enBuyukDugumKazanc)
                {
                    KokDugumSayisiIcinUcYaprakBul(hastalar, bolumleme, sonuc);
                }
                else if (enBuyukKazanc == enBuyukYasKazanc)
                {
                    KokYasIcinUcYaprakBul(hastalar, bolumleme, sonuc);
                }
                else if (enBuyukKazanc == enBuyukYilKazanc)
                {
                    KokOperasyonYiliIcinUcYaprakBul(hastalar, bolumleme, sonuc);
                }
            });

            lblUcYaprakSol.Text   = sonuc.UcYaprakSol;
            lblUcYaprakSag.Text   = sonuc.UcYaprakSag;
            lblKokDugum.Text      = sonuc.KokDugum;
            lblUcSolDurumSol.Text = sonuc.UcYaprakSolDurumSol;
            lblUcSolDurumSag.Text = sonuc.UcYaprakSolDurumSag;
            lblUcSagDurumSol.Text = sonuc.UcYaprakSagDurumSol;
            lblUcSagDurumSag.Text = sonuc.UcYaprakSagDurumSag;
        }