簡體   English   中英

有序二叉樹插入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM