A (왼쪽)와 B (오른쪽)가 이미 가득차면 이진 트리에 노드를 추가하는 방법은 무엇입니까? 균형 잡힌 나무를 만들어야합니다. 그러나 트리에 더 많은 데이터를 추가하는 방법을 알 수는 없습니다. 어떤 도움이라도 대단히 감사하겠습니다.C에서 이진 트리에 노드를 추가하는 방법은 무엇입니까?
미리 감사드립니다.
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
struct node
{
char *titel;
struct node *A;
struct node *B;
};
void display(struct node *leaf)
{
if (leaf != NULL)
{
display(leaf->A);
printf("%s\n",leaf->titel);
display(leaf->B);
}
}
struct node *insert(char* titel, struct node **leaf)
{
if (*leaf == 0)
{
*leaf = (struct node*)malloc(sizeof(struct node));
(*leaf)->titel = malloc(strlen(titel)+1);
strcpy((*leaf)->titel,titel);
(*leaf)->A = NULL;
(*leaf)->B = NULL;
}
else if ((*leaf)->A == NULL)
{
(*leaf)->A = insert(titel,&(*leaf)->A);
}
else if ((*leaf)->B == NULL)
{
(*leaf)->B = insert(titel,&(*leaf)->B);
}
//WHAT TO ADD HERE TO CREATE ANOTHER NODE?
return(*leaf);
}
int main(int argc, char const *argv[])
{
struct node *root = NULL;
insert("root",&root);
insert("chapter_1A",&root);
insert("chapter_1B",&root);
insert("chapter_2A",&root);
insert("chapter_2B",&root);
insert("chapter_3A",&root);
display(root);
return 0;
}
출력은 균형 잡힌 이진 트리와 같아야합니다. 인쇄하지 말고 메모리에 저장해야합니다.
실제 출력 : (왼쪽)이 경우
chapter_1A
root
chapter_1B
root
/ \
chapter_1A chapter_1B
/ \ / \
ch_2A ch_2B ch_3A ch_3B
and so on.
나무가 가득 찰 수있는 방법은 무엇입니까? –
정확한 문제는 무엇입니까? 어떤 출력물을 얻고 어떤 출력물을 기대합니까? –
내 트리에 다른 노드를 추가하는 방법을 모르겠습니다. 그게 내 문제 야. 루트 노드를 만들고 루트의 왼쪽과 오른쪽을 채우고 있습니다. 그러나 왼쪽 사이드 노드 또는 오른 쪽 노드에서 다른 브랜치를 생성하는 법을 모르겠습니다. 그게 내 정확한 문제 야. 편집 : 입력을 메인에서 볼 수 있습니다. 출력은 왼쪽에서 오른쪽으로 시작하는 트리 여야합니다. 루트 /\ ch_A1 ch_B1 /\/\ A2 B2의 A3의 B3 단지 균형 이진 검색 트리와 같은 . –