想要以最新的添加节点完整返回树节点的根
wanted to return root of tree node with latest addition of a node intact
问题:根节点被设置为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;
}
您的代码有很多问题,但这是我首先的。
相关文章:
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 没有从"树节点"到"树节点*"的可行转换
- 对树节点使用 CString 时出现内存泄漏
- 预分配的节点向量中的无锁树节点分配
- 接受来自键盘的树节点以确定其高度
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- C++错误(从不兼容的类型"void"分配给树节点*)
- UWP:在树节点中将文本设置为粗体
- 返回最低节点的名称
- 树节点之间的最大距离中的运行时错误
- 想要以最新的添加节点完整返回树节点的根
- 从GCC功能树节点中检索函数参数
- 如何映射数组元素以选择二进制树节点
- 通过返回指向节点的指针,列表的其余部分是否也返回?C++
- 将 Opencv Mat 返回到节点.js v8
- Boost::p tree - 访问列表中包含的属性树节点
- 二进制搜索树节点插入
- 根据其子节点的余额计算 AVL 树节点余额
- 检查树节点等于值
- 创建一个C++预排序迭代器,为循环提供树节点