[英]Ordered Binary Tree insert
我在下面的這段代碼中有一個問題,它是有序二叉樹程序的一部分。 問題是,當我在輸入中輸入數字時,某些元素會丟失,並且總是會發生。 我查看了代碼,無法弄清楚為什么會發生這種情況。 你能幫我解決這個問題嗎? 謝謝。
void insert_ord(int number, struct treenode *currentNode){
if(currentNode->flag == 0){
currentNode->number = number;
currentNode->flag = 1;
}
else{
if(number <= currentNode->number){
if(currentNode->left != NULL) insert_ord(number, currentNode->left);
else {
struct treenode *store = (struct treenode *)malloc(sizeof(struct treenode));
currentNode->left = store;
store->number = number;
store->left = store->right = NULL;
store->prev = currentNode;
}
}
if(number > currentNode->number){
if(currentNode->right != NULL) insert_ord(number, currentNode->right);
else {
struct treenode *store = (struct treenode *)malloc(sizeof(struct treenode));
currentNode->right = store;
store->number = number;
store->left = store->right = NULL;
store->prev = currentNode;
}
}
}
}
您沒有為新插入的節點設置store->flag
。 大概應該設置為1。
您還應該重組您的代碼,以免重復創建新節點 - 使用當前代碼執行此操作的最簡單方法是將其分離到新的 function 中:
struct treenode *new_node(struct treenode *parent, int number)
{
struct treenode *store = malloc(sizeof(struct treenode));
if (store) {
store->number = number;
store->left = store->right = NULL;
store->prev = parent;
store->flag = 1;
}
return store;
}
然后你的插入代碼就變成了:
if (currentNode->left)
insert_ord(number, currentNode->left);
else
currentNode->left = new_node(currentNode, number);
(對於正確的節點也類似)。
malloc 返回未初始化的 memory 並且您沒有初始化分配結構的標志字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.