构造函数生成对象但不为其赋值

时间:2013-11-17 22:38:40

标签: c++ tree binary-search-tree

我正在编写一个二叉搜索树来保存多项式的值。我唯一的问题是使用2个参数(系数,x的幂)制作一个叶子。

    tree newTree(5,2)    ;5(x^2)
    tree anothertree()   ;it works then I can insert leaf into the root

构造函数创建根,但是当我想打印树时它是空的。

这是我的构造函数,它接受2个值来为树构建一个Node。

tree::tree(const int& c,const int& x)
{
    treeNode* root = new treeNode(c,x);
}

这是我用来为树创建节点的Node结构。

        struct treeNode
       {
        int x;
        int coef;
        treeNode* left;
        treeNode* right;
        treeNode()
        {
            this->x=0;
            this->coef=0;
            this->left=nullptr;
            this->right=nullptr;
        }
        treeNode(const int& c,const int& x)
        {
            this->x = x;
            this->coef = c;
            left = nullptr;
            right = nullptr;
        }
    };

这是我正在上课的课程:

 class tree{
    private:
    treeNode* root;
     void postorder(treeNode* p);
     void inorder(treeNode* p);
     void preorder(treeNode* p);
     void destroyTree(treeNode* p);
     void copyTree(treeNode* original,treeNode* &copycat);

public:
    tree();
    tree(const int& c,const int& x);
    tree(const tree& myTree);
    ~tree();
    void insert(int c,int xval);
    const tree & operator=(const tree &myTree);
    void print_postorder();
    void print_inorder();
    void print_preorder();
 };

2 个答案:

答案 0 :(得分:2)

root将在构造函数退出后超出范围。

您需要声明一个全局根指针并在构造函数中初始化它。

答案 1 :(得分:2)

tree::tree(const int& c,const int& x)
{
    treeNode* root = new treeNode(c,x);
}
一旦你的构造函数完成,

root就会超出范围(并且会泄漏你刚刚分配的内存)。

您已treeNode* root;宣布为tree班级的成员,您需要的是:

tree::tree(const int& c,const int& x)
{
    root = new treeNode(c,x);
}

tree::tree(const int& c,const int& x) : root(new treeNode(c,x))
{
}

注意:您还需要在析构函数中释放该内存,并在任何时候更改内存位置root指向。将其包含在std::shared_ptrstd::unique_ptr中将是更好的解决方案。