未创建树
Tree not being created
本文关键字:创建 更新时间:2023-10-16
当我调用函数createBst((时,程序在函数中终止。
我在函数后面放了一个print语句,但它没有被调用。"终止"的下一个打印语句不称为
int main(){
bst b;
b.createBst();
std::cout<<"terminated"<<std::endl;
return 0;
}
class node{
public:
int val;
node* left;
node* right;
};
class bst{
public:
node* head;
void createBst();
node* newNode(int val);
};
node* bst::newNode(int v){
node n1;
node* n=&n1;
n->val=v;
n->left=nullptr;
n->right=nullptr;
return n;
}
void bst::createBst(){
head=bst::newNode(10);
head->left=bst::newNode(11);
(head->left)->left=bst::newNode(7);
head->right=bst::newNode(9);
(head->right)->left=bst::newNode(15);
(head->right)->right=bst::newNode(8);
}
输出应该"终止"。
对于初学者来说,类应该在主要使用之前定义。
此功能
node* bst::newNode(int v){
node n1;
node* n=&n1;
n->val=v;
n->left=nullptr;
n->right=nullptr;
return n;
}
调用未定义的行为,因为它返回一个局部变量n1
的指针,该变量在退出函数后将不活动。
该功能可以通过以下方式定义
node* bst::newNode(int v)
{
return new node { v, nullptr, nullptr };
}
事实上,该函数可以是一个私有静态成员函数
class bst{
public:
node* head;
void createBst();
private:
static node* newNode(int val);
};
类节点应该是bst类的嵌套私有(或受保护(类。
此外,您还需要bst类的默认构造函数来初始化head到nullptr,或者您必须在类定义(如(中显式地初始化head
class bst{
public:
node* head = nullptr;
void createBst();
private:
static node* newNode(int val);
};
要将数据插入树中,您应该编写一个函数,例如以下
void insert( int value )
{
node **current = &head;
while ( *current != nullptr )
{
if ( value < ( *current )->val )
{
current = &( *current )->left;
}
else
{
current = &( *current )->right;
}
}
*current = newNode( value );
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++类内存结构中创建"spacer"?
- 终端不会为C++文件创建.exe文件吗
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息