我試圖實現一個二叉搜索樹的目的是(重新)學習C.問題是,這current = new;
不工作,因爲tree.root仍然是一個空指針之後增加兩個節點。那有什麼問題?二叉搜索樹指針問題
#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;
}
謝謝!
hm,所以我需要一個雙指針。謝謝! – 2011-06-14 19:56:59
@ahojnnes:對於您創建的每個節點,您可能還需要考慮將「左」和「右」指針初始化爲NULL。另外,不要將變量命名爲「新」,這是令人困惑的。 – Andrei 2011-06-14 20:00:38
@Andrei:默認情況下是不是用空指針初始化的? – 2011-06-14 20:04:57