所以我想學習如何在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
無論如何,你的代碼粘貼缺少*關鍵*部分。像分配和初始化一樣。 –