İkili Ağaç Üzerinde dolaşma C Kodu

Sizlere daha önce İkili Ağaç üzerinde dolaşma konulu makalemizi sunmuştuk. Bu yazımızda ise ikili ağaç traverse işlemi c kodunu paylaşacağız.

C ile Ağaç - ama bizim dediğimiz bu değil :)


Paylaştığımız C Kodunun ana hatları şu şekildedir

* Struct yapısı ile düğüm bilgileri oluşturuldu
* kendisine parametre olarak gönderilen bilgi doğrultusunda düğüm için alan oluşturan fonksiyon oluşturuldu.
* preOrder sıralama yapan fonksiyon oluşturuldu
* postOrder sıralama yapan fonksiyon oluşturuldu
* inOrder sıralama yapan fonksiyon oluşturuldu.
* main fonksiyonu içerisinde düğümlere rastgele değerler atandı. Siz de test etmek için istediğiniz değerleri atayabilirsiniz.

Binary Tree Traverse İşlemi C Kodu


/* **********Algoritma Uzmanı********* */
/* ******www.Algoritma Uzmanı.com***** */
#include <stdio.h>
#include <stdlib.h>

// Ağaç veri yapımızdaki düğümler için struct oluşturduk
struct node
{
     int data;
     struct node* left;
     struct node* right;
};

// Her yeni node oluştururken aynı kodu tekrarlamamak için
// malloc komutuyla alan ayıran fonksiyonu ekledik
struct node* newNode(int data)
{
     struct node* node = (struct node*)
                                  malloc(sizeof(struct node));
     node->data = data;
     node->left = NULL;
     node->right = NULL;

     return(node);
}

// Ağaç elemanlarını Postorder sıralayan fonksiyon
void printPostorder(struct node* node)
{
    //Eğer düğümde veri yoksa Null Döndürüyoruz
     if (node == NULL) 
        return;

     // sol alt ağacı tarıyoruz
     printPostorder(node->left);

     // sağ alt ağacı tarıyoruz
     printPostorder(node->right);

     // node->data değerini ekrana basıyoruz
     printf("%d ", node->data);
}

//Ağaç elemanlarını inOrder olarak sıralayan fonksiyon
void printInorder(struct node* node)
{
     if (node == NULL)
          return;

     /* sol çocukları recursive olarak çağırıyoruz */
     printInorder(node->left);

     /* Elde edilen düğümün değerini ekrana yazdırıyoruz */
     printf("%d ", node->data);

     /* sağ çocukları recursive olarak çağırıyoruz */
     printInorder(node->right);
}

/* Ağaç Elemanlarını preOrder olarak ekrana bastıran Fonksiyon*/
void printPreorder(struct node* node)
{
     if (node == NULL)
          return;

     /* ilk olarak kök enrana yazdırılır */
     printf("%d ", node->data);

     /* sol alt ağacı tarıyoruz */
     printPreorder(node->left);

     /* sağ alt ağacı tarıyoruz */
     printPreorder(node->right);
}

void algoritmaUzmani();
/* main fonksiyonumuz */
int main()
{
     int secim;
     struct node *root  = newNode(7);
     root->left             = newNode(3);
     root->right           = newNode(4);
     root->left->left     = newNode(2);
     root->left->right   = newNode(1);

     printf("\nPreorder Dolasma Sonucu \n");
     printPreorder(root);

     printf("\nInorder Dolasma Sonucu \n");
     printInorder(root);

     printf("\nPostorder Dolasma Sonucu \n");
     printPostorder(root);
     
     printf("\n Konuyla ilgili yazimiza ulasmak icin lutfen klavyenizden 7 tusuna basın");
     scanf("%d", &secim);
     
     if(secim==7)
        algoritmaUzmani();

     getchar();
     return 0;
}

//sadece ilgili konuya gitmek icin. diger kodlar ile ilgisi yok
void algoritmaUzmani()
{
     system("C:\\Progra~2\\Google\\Chrome\\Application\\chrome.exe http://www.algoritmauzmani.com/2016/10/binary-tree-traverse-ikili-agaci-dolasmak.html");
     printf("\n Eger asagida sistem yolu hatasi aliyorsaniz bunu onemsemeyin");
     if(system)
     {
          system("C:\\Progra~1\\Google\\Chrome\\Application\\chrome.exe http://www.algoritmauzmani.com/2016/10/binary-tree-traverse-ikili-agaci-dolasmak.html");
          if(system)
            system("C:\\Progra~2\\Mozill~1\\firefox.exe http://www.algoritmauzmani.com/2016/10/binary-tree-traverse-ikili-agaci-dolasmak.html");
            if(system)
                system("C:\\Progra~1\\Mozill~1\\firefox.exe http://www.algoritmauzmani.com/2016/10/binary-tree-traverse-ikili-agaci-dolasmak.html");
     }
}

Etiketler: , ,