Struktur pohon biner Anda. Setiap pohon biner akan membutuhkan struktur, meskipun hanya memiliki satu variabel. Pilih nama, lalu gunakan typedef untuk membuatnya: typedef struct student_data STUDENT_DATA;
Tentukan strukturnya. Sertakan dua pointer ke struktur yang sama: struct student_data { int student_ID; int siswa_kelas; STUDENT_DATA kiri, Baik;};
Alokasikan pointer ke struktur data ini, inisialisasi ke NULL, untuk menjadi kepala pohon: STUDENT_DATA *students = NULL;
Alokasikan dua penunjuk sementara ke struktur data: STUDENT_DATA murid baru, mahasiswa_skr;
Gunakan malloc() untuk membuat elemen baru, selalu periksa kesalahan: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }
Isi bidang elemen baru. Setel bidang kiri dan kanannya ke NULL: new_student->student_ID = newID; new_student->student_size = ukuran baru; mahasiswa_baru->kiri = NULL; mahasiswa_baru->kanan = NULL;
Pertimbangkan variabel kepala. Jika variabel head adalah NULL, ini adalah elemen pertama yang ditambahkan ke pohon, jadi atur variabel head untuk menunjuk ke sana, dan Anda selesai: if (!students) { Students = new_student; kembali; }
Tangani entri duplikat jika nilai baru dan nilai saat ini sama: if (newID == cur_student->student_ID) { abort(); }
Berurusan dengan nilai-nilai yang tidak setara. Jika nilai baru kurang dari nilai saat ini, elemen baru berjalan di sebelah kiri. Tambahkan segera jika tidak ada yang tersisa. Jika tidak, telusuri kiri dan loop: if (newID < cur_student->student_ID) { if (cur_student->left == NULL) { cur_student->left = newstudent; kembali 1; } mahasiswa_skr = mahasiswa_skr->kiri;
Lakukan hal yang sama di sebelah kanan, jika tidak: } else { if (cur_student->right == NULL) { cur_student->right = newstudent; kembali 1; } skr_siswa = skr_siswa->kanan; }}
Buat variabel sementara yang menunjuk ke struktur data: STUDENT_DATA *cur_student;
Ulangi elemen, periksa nilai yang diinginkan: while (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }
Cabang kiri atau kanan, dan loop, jika tidak ditemukan: if (cur_student->student_ID < 15) { cur_student = cur_student->kanan; } else { mahasiswa_skr = mahasiswa_skr->kiri; }
Lihat apakah loop berakhir. Jika ya, berarti Anda tidak pernah menemukan item tersebut: }return 0;
Dealokasi pohon biner ketika program Anda berakhir, karena tidak semua sistem operasi akan menangani ini secara otomatis. Ini paling baik dilakukan dengan menggunakan fungsi rekursif: void deallocate_binary_tree (STUDENT_DATA *tree) {
Dealokasi subpohon kiri dan kanan secara rekursif: deallocate_binary_tree (pohon->kiri); deallocate_binary_tree (pohon->kanan);
Pencarian dan penambahan ke pohon biner juga dapat dilakukan dengan menggunakan rekursi. Ini akan jauh lebih mudah untuk ditulis dan dipelihara, tetapi sedikit lebih sulit untuk dipahami, sampai Anda terbiasa. Adalah umum untuk membuat pohon biner yang hanya berisi pointer ke dalam struktur data C kedua, seringkali berupa larik atau daftar tertaut, tempat data aktual berada. Setiap pohon biner adalah indeks untuk mencari dengan cepat satu bidang data daftar.
Menghapus dari pohon biner adalah algoritma yang sangat rumit dalam C, tetapi dalam banyak penggunaan pohon biner, elemen tidak pernah dihapus.