智能指针的二叉搜索树

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 中使 leftright 指针最初等于 nullptr,而不是创建新节点,因为你不知道它会是用过的。根由 CreateNode 函数的结果初始化。