Jak vytvořit binární strom v C

Strukturujte svůj binární strom. Každý binární strom bude potřebovat strukturu, i když má pouze jednu proměnnou. Vyberte název a poté jej vytvořte pomocí typedef: typedef struct student_data STUDENT_DATA;

Definujte strukturu. Zahrňte dva ukazatele na stejnou strukturu: struct student_data { int student_ID; int student_grade; STUDENT_DATA vlevo, odjet, že jo;};

Přidělte na tuto datovou strukturu ukazatel, inicializujte ji na NULL, aby byla hlavou stromu: STUDENT_DATA *students = NULL;

Přidělte dva dočasné ukazatele datové struktuře: STUDENT_DATA nový student, cur_student;

K vytvoření nového prvku použijte malloc() a vždy zkontrolujte, zda nedošlo k chybě: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }

Vyplňte pole nového prvku. Nastavte jeho levé a pravé pole na NULL: new_student->student_ID = newID; new_student->student_size = velikost novinek; new_student->left = NULL; new_student->right = NULL;

Zvažte proměnnou hlavy. Pokud je proměnná head NULL, jedná se o první prvek přidaný do stromu, takže nastavte proměnnou head tak, aby na něj ukazovala, a máte hotovo: if (!students) { students = new_student; vrátit se; }

Zpracujte duplicitní záznam, pokud se nová hodnota a aktuální hodnota rovnají: if (newID == cur_student->student_ID) { abort(); }

Vypořádejte se s nerovnými hodnotami. Pokud je nová hodnota menší než aktuální hodnota, přesune se nový prvek doleva. Okamžitě jej přidejte, pokud vlevo nic není. V opačném případě přejděte doleva a ve smyčce: if (newID < cur_student->student_ID) { if (cur_student->left == NULL) { cur_student->left = newstudent; návrat 1; } cur_student = cur_student->left;

Udělejte to samé vpravo, jinak: } else { if (cur_student->right == NULL) { cur_student->right = newstudent; návrat 1; } cur_student = cur_student->right; }}

Vytvořte dočasnou proměnnou ukazující na datovou strukturu: STUDENT_DATA *cur_student;

Procházejte prvky a zkontrolujte požadovanou hodnotu: while (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }

Větev vlevo nebo vpravo a smyčka, pokud není nalezena: if (cur_student->student_ID < 15) { cur_student = cur_student->right; } else { cur_student = cur_student->left; }

Podívejte se, zda smyčka končí. Pokud ano, znamená to, že jste položku nikdy nenašli: }return 0;

Udělte přidělení binárního stromu, když váš program skončí, protože ne všechny operační systémy to zvládnou automaticky. To se nejlépe provádí pomocí rekurzivní funkce: void deallocate_binary_tree (STUDENT_DATA *strom) {

Dealokujte levý a pravý podstrom rekurzivně: deallocate_binary_tree (strom->left); deallocate_binary_tree (strom->vpravo);

Vyhledávání a přidávání do binárních stromů lze také provádět pomocí rekurze. Bude to mnohem jednodušší psát a udržovat, ale trochu hůře pochopitelné, dokud si na to nezvyknete. Je běžné vytvořit binární strom, který obsahuje pouze ukazatele na druhou datovou strukturu C, často pole nebo propojený seznam, kde jsou umístěna skutečná data. Každý binární strom je index pro rychlé prohledání jednoho pole dat seznamu.

Mazání z binárního stromu je v C velmi komplikovaný algoritmus, ale při mnoha použitích binárních stromů se prvky nikdy neodstraňují.