배열의 숫자 목록을 거쳐 이진 검색 트리에 삽입하는 작은 프로그램을 작성하려고합니다. 여기에 내가 가진 무엇 :초기화되지 않은 값을 함수로 구문 분석
#include <stdio.h>
#include <stdlib.h>
typedef struct node_t node_t;
struct node_t {
int data;
node_t *left;
node_t *right;
};
int insert(node_t *node, int n);
int main(void) {
int array[8] = {5, 8, 3, 6, 9, 2, 4, 7};
int i;
node_t *root;
for (i = 0; i < 8; i++) {
insert(root, array[i]);
}
return 0;
}
int insert(node_t *node, int n) {
if (node == NULL) {
node = malloc(sizeof node);
node->data = n;
return 1;
}
if (n > node->data) {
insert(node->left, n);
} else if (n < node->data) {
insert(node->right, n);
} else {
return -1;
}
return 0; // Suppress 'control reaches end of non-void function'
}
내가 GCC로 컴파일 할 때 내가 말하는 경고 얻을 " '루트'를이 함수에서 초기화되지 않은 사용할 수 있습니다." 이 (적어도 Windows에서) 오류에 원인이 실행하지만, main()
에 root->data
를 인쇄하여 산출 입력 노드에 대한 포인터가 그래서 NULL
있다면 내가 구현하려고했던 생각이 insert()
기능이 확인 된 0
그것을 malloc 할 수 있습니다. 또한 재귀가 처리되는 방식 때문에 삽입되는 숫자가 해당 노드에 삽입되어야합니다. 노드가 NULL
과 같지 않으면 숫자를 삽입해야하는 노드의 측면에서 재귀 적으로 insert()
을 호출합니다.
이것이 작동하지 않는 이유는 포인터과 관련이 없으며 root->left
/root->right
이 아니지만이 문제를 해결하기 위해 무엇을 할 수 있는지 알지 못합니다. 어떤 도움을 주시면 감사하겠습니다. 감사합니다!
재귀 호출의 반환 값은 어떻게됩니까? –
문제에 대해서는 c *에서 참조로 * 에뮬레이트 통과를 검색하십시오. –
@Someprogrammerdude 오른쪽 문제 해결을 위해 저의 잘못된 지점에서 코드를 가져 와서 죄송합니다.검색이 진행되는 동안 뭔가 빠졌을 수도 있지만 Google의 3 대 결과는 도움이되지 않는 것 같습니다. 포인터를 전달하는 반면 초기화 된 변수의 주소를 함수로 전달하는 것에 대한 이야기 인 것처럼 보입니다. 무엇을 저장할 지 말하지 않은 주소. – Arkantos