C'de İkili Ağaç Nasıl Oluşturulur

İkili ağacınızı yapılandırın. Her ikili ağacın, yalnızca bir değişkeni olsa bile bir yapıya ihtiyacı olacaktır. Bir ad seçin, ardından onu oluşturmak için typedef'i kullanın: typedef struct Student_data STUDENT_DATA;

Yapıyı tanımlayın. Aynı yapıya iki işaretçi ekleyin: struct Student_data { int Student_ID; int öğrenci notu; STUDENT_DATA ayrıldı, sağ;};

Ağacın başı olması için bu veri yapısına bir işaretçi tahsis edin, onu NULL olarak başlatın: STUDENT_DATA *students = NULL;

Veri yapısına iki geçici işaretçi atayın: STUDENT_DATA yeni öğrenci, cur_student;

Yeni bir öğe oluşturmak için malloc()'u kullanın, her zaman bir hatayı kontrol edin: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }

Yeni öğenin alanlarını doldurun. Sol ve sağ alanlarını NULL olarak ayarlayın: new_student->student_ID = newID; new_student->student_size = haber boyutu; new_student->sol = NULL; new_student->sağ = NULL;

Baş değişkenini düşünün. head değişkeni NULL ise, bu ağaca eklenen ilk öğedir, bu nedenle head değişkenini ona işaret edecek şekilde ayarlayın ve işiniz bitti: if (!students) { öğrenciler = yeni_student; dönüş; }

Yeni değer ve mevcut değer eşitse, yinelenen girişi işleyin: if (newID == cur_student->student_ID) { abort(); }

Eşit olmayan değerlerle uğraşın. Yeni değer mevcut değerden küçükse, yeni eleman sola gider. Solda bir şey yoksa hemen ekleyin. Aksi takdirde, sola dönün ve döngü yapın: if (newID < cur_student->student_ID) { if (cur_student->left == NULL) { cur_student->left = newstudent; dönüş 1; } cur_student = cur_student->sol;

Aynı şeyi sağda yapın, aksi takdirde: } else { if (cur_student->right == NULL) { cur_student->right = newstudent; dönüş 1; } cur_student = cur_student->sağ; }}

Veri yapısına işaret eden geçici bir değişken oluşturun: STUDENT_DATA *cur_student;

Öğeler arasında dolaşın, istenen değeri kontrol edin: while (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }

Sola veya sağa dallandırın ve bulunamazsa döngü yapın: if (cur_student->student_ID < 15) { cur_student = cur_student->right; } else { cur_student = cur_student->sol; }

Döngünün bitip bitmediğine bakın. Varsa, öğeyi hiç bulamadığınız anlamına gelir: }return 0;

Tüm işletim sistemleri bunu otomatik olarak işlemeyeceğinden, programınız sona erdiğinde ikili ağacı serbest bırakın. Bu en iyi özyinelemeli işlev kullanılarak yapılır: void Deallocate_binary_tree (STUDENT_DATA *tree) {

Sol ve sağ alt ağaçları yinelemeli olarak serbest bırakın: Deallocate_binary_tree (ağaç->sol); Deallocate_binary_tree (ağaç->sağ);

İkili ağaçlarda arama ve ekleme de özyineleme kullanılarak yapılabilir. Bunu yazmak ve sürdürmek çok daha kolay olacak, ancak alışana kadar anlaması biraz daha zor olacak. Gerçek verilerin bulunduğu, genellikle bir dizi veya bağlantılı liste olmak üzere ikinci bir C veri yapısına yalnızca işaretçiler içeren bir ikili ağaç oluşturmak yaygındır. Her ikili ağaç, liste verilerinin tek bir alanını hızlı bir şekilde aramak için bir dizindir.

Bir ikili ağaçtan silme, C'de çok karmaşık bir algoritmadır, ancak ikili ağaçların birçok kullanımında öğeler asla silinmez.