智能指针的二叉搜索树
binary search tree by smart pointers
我使用行指针来实现二叉搜索树数据结构并且它工作得很好,但是当我用 shared_ptr 替换行指针时它编译成功但程序因未知原因崩溃 运行 -时间错误。你能帮忙吗?
#include<iostream>
#include<memory>
class node{
public:
int data;
std::shared_ptr<node>left = std::make_shared<node>();
std::shared_ptr<node>right = std::make_shared<node>();
};
std::shared_ptr<node>CreateNode(int x);
void print_tree(const std::shared_ptr<node>&x);
int main(){
auto root = std::make_shared<node>();
root = CreateNode(12);
root->left = CreateNode(9);
root->right = CreateNode(14);
root->left->right = CreateNode(10);
root->left->right = CreateNode(11);
print_tree(root);
return 0;
}
std::shared_ptr<node>CreateNode(int x){
std::shared_ptr<node>NewNode = std::make_shared<node>();
NewNode->data = x;
NewNode->left = NewNode->right = nullptr;
return NewNode;
}
void print_tree(const std::shared_ptr<node>&x){
if(x==nullptr) return;
std::cout<<x->data<<std::endl;
print_tree(x->left);
print_tree(x->right);
}
#include<iostream>
#include<memory>
class node
{
public:
int data;
std::shared_ptr<node>left;
std::shared_ptr<node>right;
};
std::shared_ptr<node>CreateNode(int x);
void print_tree(const std::shared_ptr<node>&x);
int main()
{
auto root = CreateNode(12);
root->left = CreateNode(9);
root->right = CreateNode(14);
root->left->right = CreateNode(10);
root->left->right = CreateNode(11);
print_tree(root);
return 0;
}
std::shared_ptr<node>CreateNode(int x)
{
std::shared_ptr<node>NewNode = std::make_shared<node>();
NewNode->data = x;
NewNode->left = NewNode->right = nullptr;
return NewNode;
}
void print_tree(const std::shared_ptr<node>&x)
{
if(x==nullptr) return;
std::cout<<x->data<<std::endl;
print_tree(x->left);
print_tree(x->right);
}
这适用于我的机器。我在 node
class 中使 left
和 right
指针最初等于 nullptr
,而不是创建新节点,因为你不知道它会是用过的。根由 CreateNode
函数的结果初始化。
我使用行指针来实现二叉搜索树数据结构并且它工作得很好,但是当我用 shared_ptr 替换行指针时它编译成功但程序因未知原因崩溃 运行 -时间错误。你能帮忙吗?
#include<iostream>
#include<memory>
class node{
public:
int data;
std::shared_ptr<node>left = std::make_shared<node>();
std::shared_ptr<node>right = std::make_shared<node>();
};
std::shared_ptr<node>CreateNode(int x);
void print_tree(const std::shared_ptr<node>&x);
int main(){
auto root = std::make_shared<node>();
root = CreateNode(12);
root->left = CreateNode(9);
root->right = CreateNode(14);
root->left->right = CreateNode(10);
root->left->right = CreateNode(11);
print_tree(root);
return 0;
}
std::shared_ptr<node>CreateNode(int x){
std::shared_ptr<node>NewNode = std::make_shared<node>();
NewNode->data = x;
NewNode->left = NewNode->right = nullptr;
return NewNode;
}
void print_tree(const std::shared_ptr<node>&x){
if(x==nullptr) return;
std::cout<<x->data<<std::endl;
print_tree(x->left);
print_tree(x->right);
}
#include<iostream>
#include<memory>
class node
{
public:
int data;
std::shared_ptr<node>left;
std::shared_ptr<node>right;
};
std::shared_ptr<node>CreateNode(int x);
void print_tree(const std::shared_ptr<node>&x);
int main()
{
auto root = CreateNode(12);
root->left = CreateNode(9);
root->right = CreateNode(14);
root->left->right = CreateNode(10);
root->left->right = CreateNode(11);
print_tree(root);
return 0;
}
std::shared_ptr<node>CreateNode(int x)
{
std::shared_ptr<node>NewNode = std::make_shared<node>();
NewNode->data = x;
NewNode->left = NewNode->right = nullptr;
return NewNode;
}
void print_tree(const std::shared_ptr<node>&x)
{
if(x==nullptr) return;
std::cout<<x->data<<std::endl;
print_tree(x->left);
print_tree(x->right);
}
这适用于我的机器。我在 node
class 中使 left
和 right
指针最初等于 nullptr
,而不是创建新节点,因为你不知道它会是用过的。根由 CreateNode
函数的结果初始化。