아래 프로그램에서 BST에 배열 arr
에있는 값으로 채우려고합니다. 이 프로그램은 오랜 시간 동안 루프에서 실행 된 다음 세그먼트 오류가 발생합니다. 누군가 내가 여기서 누락 된 것을 설명해 주시겠습니까?이진 트리 - 값을 추가 할 수 없습니다
struct node {
int value;
struct node *left;
struct node *right;
};
void add(struct node **root, int i);
int arr[14] = {30, 50, 25, 32, 45, 55, 20, 27, 31, 43, 47, 52, 88};
int main(void)
{
struct node *root = malloc(sizeof(struct node));
root->value = 35;
root->left = NULL;
root->right = NULL;
struct node *start = root;
int i;
for (i = 0; i < 13; i++) {
add(&root, arr[i]);
root = start;
}
printf("%d\n", root->value);
printf("%p\n", root->right);
printf("%p\n", root->left);
}
void add(struct node **root, int i)
{
while ((*root) != NULL) {
printf("left: %p\n", (*root)->left);
if (i < (*root)->value) {
add(&((*root)->left), i);
} else {
add(&((*root)->right), i);
}
}
*root = malloc(sizeof(struct node));
(*root)->value = i;
(*root)->left = NULL;
(*root)->right = NULL;
}
추가'의 마지막에 새로운 노드를 할당의 의미는 무엇인가 : 제대로 그 루프 그냥 다음과 같을해야 할 (목표를 가정하면 배열의 만 값을 호스트하는 것입니다) 및 포인터를 반환? –