簡體   English   中英

迭代地將新節點添加到二叉樹中,根被覆蓋

[英]Iteratively adding a new node to a binary tree, root getting overwritten

我發現需要的代碼來迭代添加新節點,盡管在我的情況下它不起作用。

 // bal=left  jobb=right
void bkf::beszur(int k) {
    if(root != NULL) 
        while (true) {
            if (k < root->data) {
                if (root->bal == NULL) {
                    root->bal = new node;
                    root->bal->data = k;
                    root->bal->bal = NULL;
                    root->bal->jobb = NULL;
                    break;
                }
                else
                    root = root->bal;   // overwrites root
            }
            else 
                if (root->jobb == NULL) {
                    root->jobb = new node;
                    root->jobb->data = k;
                    root->jobb->bal = NULL;
                    root->jobb->jobb = NULL;
                    break;
                } else 
                    root = root->jobb;   // overwrites root
        }
    else {
        root = new node;
        root->data = k;
        root->bal = NULL;
        root->jobb = NULL;
    }
}

在“ root = root-> bal”處,根將被覆蓋,因此它也需要數據以及root-> bal的左右節點。 我還嘗試創建一個“節點* p”,並為其分配根,但是那樣,它會為p本身而不是p所指向的位置分配內存。 這是聲明:

struct node {
    int data;
    node *bal;
    node *jobb;
};

class bkf {
    node *root;
    // ...

如何正確完成?

也許關鍵是您在樹中進行遍歷/插入之前不存儲根節點。 因此,root是調用函數后的任意節點。

也許您應該在第一個函數調用之前存儲根,以始終使入口點再次啟動。

因為root是類級別范圍變量。 制作root的本地副本,比方說root_local。

root_local =根。

然后開始在函數中使用它。

當您執行root = root-> bal時。 在類級別更改root。

暫無
暫無

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

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