想要以最新的添加节点完整返回树节点的根

wanted to return root of tree node with latest addition of a node intact

本文关键字:返回 树节点 添加 最新 节点      更新时间:2023-10-16

问题:根节点被设置为null,并且在树中的实际添加并不完全发生:

客户端程序:

int main () {
int arr [] = {15, 10, 100, 5, 13, 90, 80, 50, 10, 5, 3};
int len = sizeof(arr)/sizeof(*arr);
using namespace btree;
//create an instance of btree::tree;
btree::tree* tree = new btree::tree();
btree::btnode* root = tree->get_root_btnode();
//create tree
tree->create_btree (root, arr, len);
delete tree;
return 0;

}

成员功能(在客户端程序中使用(看起来如下:

//creates a complete tree
void tree::create_btree (btnode* root, int arr[], int len) {
    for (int i = 0; i < len; i++) {
        add_a_btnode (root, arr[i]);
    }
    std::cout << "Tree creation successful!!" << std::endl;
}
void tree::add_a_btnode (btnode* root, int data) {
    ///check if tree is empty
    btnode *current = root;
    if (!current) {
        btnode* newbtnode = new btnode(data);
        root = newbtnode;
        return;
    }
    if (current->get_left_btnode() != nullptr) {
        //can we add it as right child of current btnode?
        if (current->get_right_btnode() != nullptr) {
            //recurse
            add_a_btnode (current->get_left_btnode(), current->get_data());
        } else {
            btnode* newbtnode = new btnode(data);
            current->m_right = newbtnode;
        }
    } else {
        btnode* newbtnode = new btnode(data);
        current->m_left = newbtnode;
    }
    std::cout << "a root btnode is added with data: " << data << endl;
}

和最后我希望将root节点返回的成员函数(这还没有完全发生:(任何帮助(:

btnode* tree::get_root_btnode () { return m_root_btnode; }

您的问题在这里:

if (!current) {
    btnode* newbtnode = new btnode(data);
    root = newbtnode;
    return;
}

您创建root节点并将其保存到变量root。但这是一个局部变量,实际上您根本不修改树对象。

相反,您应该将其保存到tree类内的变量。所以就是这样:

if (!current) {
    m_root_btnode = new btnode(data);
    return;
}

顺便说一句。当功能是tree类的方法并且您可以访问原始root变量时,为什么要将指针作为参数作为参数?这会更干净,然后您不会犯这个错误。

更改create_btree函数如下:

void tree::create_btree(int arr[], int len) {
    if (len > 0) {
        m_root_btnode = new btnode(arr[0]);
    }
    for (int i = 1; i < len; i++) {
        add_a_btnode(m_root_btnode, arr[i]);
    }
    std::cout << "Tree creation successful!!" << std::endl;
}

您的代码有很多问题,但这是我首先的。