이진 트리를 구조화하십시오. 모든 이진 트리에는 변수가 하나만 있더라도 구조가 필요합니다. 이름을 선택한 다음 typedef를 사용하여 이름을 만듭니다. typedef struct student_data STUDENT_DATA;
구조를 정의합니다. 동일한 구조에 대한 두 개의 포인터를 포함합니다. struct student_data { int student_ID; 정수 학생 학년; STUDENT_DATA 왼쪽, 오른쪽;};
이 데이터 구조에 대한 포인터를 할당하고 NULL로 초기화하여 트리의 머리가 되도록 합니다. STUDENT_DATA *students = NULL;
데이터 구조에 두 개의 임시 포인터 할당: STUDENT_DATA 신입생, cur_학생;
malloc()을 사용하여 새 요소를 생성하고 항상 오류를 확인합니다. if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }
새 요소의 필드를 채웁니다. 왼쪽 및 오른쪽 필드를 NULL로 설정합니다. new_student->student_ID = newID; new_student->student_size = newsize; new_student->left = NULL; new_student->오른쪽 = NULL;
헤드 변수를 고려하십시오. 헤드 변수가 NULL이면 트리에 추가된 첫 번째 요소이므로 헤드 변수를 이를 가리키도록 설정하면 완료됩니다. if (!students) { Students = new_student; 반품; }
새 값과 현재 값이 같으면 중복 항목을 처리합니다. if (newID == cur_student->student_ID) { abort(); }
불평등한 가치를 다루십시오. 새 값이 현재 값보다 작으면 새 요소가 왼쪽으로 이동합니다. 왼쪽에 아무것도 없으면 즉시 추가하십시오. 그렇지 않으면 왼쪽을 탐색하고 루프: if (newID < cur_student->student_ID) { if (cur_student->left == NULL) { cur_student->left = newstudent; 반환 1; } cur_student = cur_student->왼쪽;
오른쪽에서 동일한 작업을 수행하고 그렇지 않으면: } else { if (cur_student->right == NULL) { cur_student->right = newstudent; 반환 1; } cur_student = cur_student->오른쪽; }}
데이터 구조를 가리키는 임시 변수를 만듭니다. STUDENT_DATA *cur_student;
요소를 순환하면서 원하는 값을 확인합니다. while (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }
왼쪽 또는 오른쪽으로 분기하고 찾지 못한 경우 루프: if (cur_student->student_ID < 15) { cur_student = cur_student->right; } else { cur_student = cur_student->왼쪽; }
루프가 끝나는지 확인하십시오. 그렇다면 항목을 찾지 못한 것입니다. }return 0;
모든 운영 체제가 이를 자동으로 처리하는 것은 아니므로 프로그램이 종료될 때 이진 트리의 할당을 해제하십시오. 이것은 재귀 함수를 사용하여 가장 잘 수행됩니다. void deallocate_binary_tree (STUDENT_DATA *tree) {
왼쪽 및 오른쪽 하위 트리를 재귀적으로 할당 해제합니다. deallocate_binary_tree (tree->left); deallocate_binary_tree(트리->오른쪽);
재귀를 사용하여 이진 트리를 검색하고 추가할 수도 있습니다. 이것은 작성하고 유지 관리하는 것이 훨씬 쉬울 것이지만 익숙해질 때까지는 이해하기가 조금 더 어렵습니다. 실제 데이터가 있는 두 번째 C 데이터 구조(종종 배열 또는 연결 목록)에 대한 포인터만 포함하는 이진 트리를 만드는 것이 일반적입니다. 각 이진 트리는 목록 데이터의 단일 필드를 빠르게 검색하기 위한 인덱스입니다.
이진 트리에서 삭제하는 것은 C에서 매우 복잡한 알고리즘이지만 이진 트리를 많이 사용하는 경우 요소가 삭제되지 않습니다.