簡體   English   中英

非遞歸二叉樹insert()方法不起作用

[英]non recursive binary tree insert() method not working

我編寫了一個二進制樹代碼,用於在非遞歸方法中將元素插入其中。 代碼未按預期工作。 無論我調試代碼多少次,似乎都沒有錯,但我得到了錯誤的結果。 我希望你們能幫忙。 提前致謝。

void insert(int element){
    if(root == NULL){
        struct elemq *node;
        node = (struct elemq *)malloc(sizeof(struct elemq));
        node->ele = element;
        node->left = NULL;
        node->right = NULL;
        root = node;
        cout << root->ele << "\n";
    }
    else{
        struct elemq *ref;
        ref = root;
        while(ref != NULL){
            if(element <= ref->ele){
                if(ref->left == NULL){
                    struct elemq *node;
                    node = (struct elemq *)malloc(sizeof(struct elemq ));
                    node->ele = element;
                    node->left = NULL;
                    node->right = NULL;
                    ref->left = node;
                    break;
                }
                else{
                    ref = ref->left;
                }
            }
            else if(element > ref->ele){
                if(ref->right == NULL){
                    struct elemq *node;
                    node = (struct elemq *)malloc(sizeof(struct elemq ));
                    node->ele = element;
                    node->left = NULL;
                    node->right = NULL;
                    ref->right = node;
                    break;
                }
                else{
                    ref = ref->right;
                }
            }
        }
    }
}

每次我嘗試插入一個元素時,每個元素都被視為root ,而不僅僅是第一次。 因此,每次條件if(root == NULL)true 我將root聲明為全局變量,並在main()中將其初始化為NULL 我通過將cout <<放在第一個if()條件中來了解這一點。 我將之前的帖子修改為這個新問題。

node = ref->left;

你要

ref->left = node;

並且類似於ref-> right

我認為您錯誤地設置了要添加到引用的節點,而不是設置對要添加的節點的左右引用。 node = ref->left改為ref->left = node ,同樣改為right。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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