Como criar uma árvore binária em C

click fraud protection

Estruture sua árvore binária. Cada árvore binária precisará de uma estrutura, mesmo que tenha apenas uma variável. Escolha um nome e use typedef para criá-lo: typedef struct student_data STUDENT_DATA;

Defina a estrutura. Inclui dois indicadores para a mesma estrutura: struct student_data {int student_ID; int student_grade; STUDENT_DATA deixou, direito;};

Aloque um ponteiro para esta estrutura de dados, inicializando-a com NULL, para ser a cabeça da árvore: STUDENT_DATA * students = NULL;

Aloque dois ponteiros temporários para a estrutura de dados: STUDENT_DATA novo estudante, cur_student;

Use malloc () para criar um novo elemento, sempre verificando se há algum erro: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) {abort (); }

Preencha os campos do novo elemento. Defina seus campos esquerdo e direito como NULL: new_student-> student_ID = newID; new_student-> student_size = newsize; new_student-> left = NULL; new_student-> right = NULL;

Considere a variável head. Se a variável head for NULL, este é o primeiro elemento adicionado à árvore, então defina a variável head para apontar para ele, e pronto: if (! Students) {students = new_student; Retorna; }

Trate a entrada duplicada se o novo valor e o valor atual forem iguais: if (newID == cur_student-> student_ID) {abort (); }

Lide com valores desiguais. Se o novo valor for menor que o valor atual, o novo elemento vai para a esquerda. Adicione-o imediatamente se não houver nada à esquerda. Caso contrário, atravesse para a esquerda e faça um loop: if (newID student_ID) {if (cur_student-> left == NULL) {cur_student-> left = newstudent; return 1; } cur_student = cur_student-> left;

Faça a mesma coisa à direita, caso contrário:} else {if (cur_student-> right == NULL) {cur_student-> right = newstudent; return 1; } cur_student = cur_student-> certo; }}

Crie uma variável temporária apontando para a estrutura de dados: STUDENT_DATA * cur_student;

Faça um loop pelos elementos, verificando o valor desejado: while (cur_student) {if (cur_student-> student_ID == 15) {return cur_student-> student_grade; }

Desvie para a esquerda ou direita e faça um loop, se não for encontrado: if (cur_student-> student_ID <15) {cur_student = cur_student-> right; } else {cur_student = cur_student-> left; }

Veja se o loop termina. Em caso afirmativo, significa que você nunca encontrou o item:} return 0;

Desaloque a árvore binária quando seu programa terminar, pois nem todos os sistemas operacionais farão isso automaticamente. Isso é feito melhor usando uma função recursiva: void deallocate_binary_tree (STUDENT_DATA * tree) {

Desalocar as subárvores esquerda e direita recursivamente: deallocate_binary_tree (tree-> left); deallocate_binary_tree (árvore-> direita);

Pesquisar e adicionar árvores binárias também pode ser feito usando recursão. Isso será muito mais fácil de escrever e manter, mas um pouco mais difícil de entender, até que você se acostume. É comum criar uma árvore binária que contenha apenas ponteiros para uma segunda estrutura de dados C, geralmente uma matriz ou lista vinculada, onde os dados reais residem. Cada árvore binária é um índice para pesquisar rapidamente um único campo dos dados da lista.

Excluir de uma árvore binária é um algoritmo muito complicado em C, mas em muitos usos de árvores binárias, os elementos nunca são excluídos.