C를 (다시) 배우기 위해 이진 검색 트리를 구현하려고했습니다. 문제는이 current = new;
이 tree.root가 여전히 null 포인터이므로 원하는대로 작동하지 않는다는 것입니다. 두 개의 노드를 추가합니다. 그게 뭐가 잘못 됐니?이진 검색 트리 포인터 문제
#include <stdlib.h>
#include <stdio.h>
typedef struct BinaryNode {
int key;
double value;
struct BinaryNode *left;
struct BinaryNode *right;
} BinaryNode;
typedef struct BinaryTree {
struct BinaryNode *root;
} BinaryTree;
static void binary_tree_insert_recursive(BinaryNode *current, BinaryNode *new) {
if (current == NULL || current->key == new->key) {
current = new;
} else if (current->key > new->key) {
binary_tree_insert_recursive(current->left, new);
} else if (current->key < new->key) {
binary_tree_insert_recursive(current->right, new);
}
}
void binary_tree_insert(BinaryTree *tree, int key, double value) {
BinaryNode *new = (BinaryNode *) malloc(sizeof(BinaryNode));
new->key = key;
new->value = value;
binary_tree_insert_recursive(tree->root, new);
}
int main(void) {
BinaryTree tree;
binary_tree_insert(&tree, 5, 123);
binary_tree_insert(&tree, 10, 123);
printf("%p\n", tree.root);
return 0;
}
고마워요!
흠, 이중 포인터가 필요합니다. 고맙습니다! –
@ahojnnes : 작성한 모든 노드에 대해 "왼쪽"및 "오른쪽"포인터를 NULL로 초기화하는 것을 고려해야 할 수도 있습니다. 또한 변수 이름을 "new"로 지정하지 마십시오. 혼란 스럽습니다. – Andrei
@Andrei : 기본적으로 널 포인터로 초기화되지 않습니까? –