所以我想学习如何在C中创建一个二叉树,到目前为止我已经得到了这个。C中的递归二叉树插入
void addRecordsToTree(struct date *in, struct date *root) {
if (root == NULL) {
root = malloc(sizeof(struct date));
root = in;
return;
} else {
//Right side of tree processing
if (compareTwoRecords(in, root) >= 0) {
addRecordsToTree(in, root->right);
return;
} else {
root->right = in;
return;
}
//Left side of tree processing.
if (compareTwoRecords(in, root) < 0) {
addRecordsToTree(in, root->left);
return;
} else {
root->left = in;
return;
}
}
}
int main() {
loadFiles();
struct date treeRoot;
struct date *old = malloc(sizeof(struct date));
old = loadContentsIntoHeap(files[file2014]);
addRecordsToTree(&old[0], &treeRoot);
addRecordsToTree(&old[1], &treeRoot);
addRecordsToTree(&old[2], &treeRoot);
addRecordsToTree(&old[3], &treeRoot);
addRecordsToTree(&old[4], &treeRoot);
addRecordsToTree(&old[5], &treeRoot);
printRecord(7, old);
return 0;
}
问题是当我在调试器中检查程序的状态时,只是混乱了数据。我认为这可能是一个类型问题,我发现指针是一个令人难以置信的概念。我不确定我是否已经正确使用它们。所以这里是调试器的屏幕截图。
正如你可以在底部看到结构称为“老”是我试图让树出来的树根和在这里我想将它,但我不明白为什么数据我得到这些垃圾值。
什么是与左右的内存地址?我没有正确创建它们吗?
我做的另一个观察是,当我在调试器中观察我的代码时,似乎root永远不是== NULL并且永远不会被设置,为什么?
'root = malloc(sizeof(struct date)); root = in;' - 所以你正在分配内存,然后通过重新分配相同的指针来泄漏它。 –
那部分永远不会运行。 – Definity
无论如何,你的代码粘贴缺少*关键*部分。像分配和初始化一样。 –