árvores binárias em C são uma boa maneira de organizar dinamicamente os dados para facilitar a busca . No entanto, eles exigem muito trabalho para manter. Instruções
Criar a árvore de Binary
1
Estrutura sua árvore binária. Cada árvore binária vai precisar de uma estrutura , mesmo que ele só tem uma variável. Escolha um nome, em seguida, usar typedef para criá-lo :
typedef struct student_data STUDENT_DATA ; Página 2 Definir a estrutura . Inclua dois ponteiros para a mesma estrutura :
struct {int student_data student_id ; int student_grade ; STUDENT_DATA * deixou , * direito ; } ;
3 Alocar um ponteiro para esta estrutura de dados , inicializando-lo para NULL , para ser a cabeça da árvore :
STUDENT_DATA * estudantes = NULL;
Adicionar à árvore de Binary
4 Alocar dois ponteiros temporários para a estrutura de dados :
STUDENT_DATA * new_student , * cur_student ;
5 Use malloc () para criar um novo elemento, sempre a verificação de um erro:
if (( new_student = malloc ( sizeof ( STUDENT_DATA ) )) == NULL) { abort ( );}
6 preencher os campos do novo elemento. Defina seus campos de esquerda e direita para NULL :
new_student -> student_id = NewID ; new_student -> student_size = novotamanho ; new_student -> left = NULL; new_student -> direita = NULL;
7 Considere a cabeça variável. Se a variável de cabeça é NULL, este é o primeiro elemento adicionado à árvore , para definir a variável de cabeça para apontar para ele , e pronto :
se { estudantes = new_student ; retorno ;} < (estudantes !) br> 8 Comece no topo da árvore:
cur_student = estudantes , enquanto ( cur_student ) {
9 Manipular a entrada duplicada se o novo valor e valor atual são iguais :
if ( NewID == cur_student -> student_id ) { abort ( );}
10 lidar com valores desiguais . Se o novo valor é menor do que o valor actual , o novo elemento vai para a esquerda . Adicione imediatamente se não há nada à esquerda. Caso contrário, atravessar para a esquerda e loop:
if ( NewID student_id ) {if ( cur_student -> esquerda == null) { cur_student -> left = newstudent ; retornar 1 ;} cur_student = cur_student -> esquerda;
11 Faça a mesma coisa do lado direito, de outra forma :
} else {if ( cur_student -> direita == null) { cur_student -> direita = newstudent ; retornar 1 ;} cur_student = cur_student -> direita ;}}
Pesquisar na árvore binária
12 Criar um apontador temporário variável para a estrutura de dados : STUDENT_DATA
* cur_student ;
13 Defina sua variável temporária para a cabeça variável :
cur_student = students_head ;
14 loop através dos elementos , verificando o valor desejado :
while ( cur_student ) {if ( cur_student -> student_id == 15) {return cur_student -> student_grade ;}
15 Filial esquerda ou direita, e loop, se não for encontrado:
if ( cur_student -> student_id cur_student = cur_student -> direita ;} else { cur_student = cur_student -> left; }
16 Veja se o laço termina Se isso acontecer , significa que você nunca encontrou o item : .
} return 0;
Clean Up
17 . liberar a árvore binária quando o programa termina , como nem todos os sistemas operacionais vai lidar com isso automaticamente este é o melhor feito usando uma função recursiva : deallocate_binary_tree
void ( * STUDENT_DATA árvore ) {
18 Observe : Se não não é qualquer árvore , não há nada a fazer:
if (! árvore) return;
19 liberar a subárvores esquerda e direita de forma recursiva :
deallocate_binary_tree ( árvore -> esquerda); deallocate_binary_tree ( árvore -> direita) ;
20 desalocar o elemento, e está feito :
livre (árvore) ;}