我正在编写一个二叉搜索树来保存多项式的值。我唯一的问题是使用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* ©cat);
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();
};
答案 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_ptr
或std::unique_ptr
中将是更好的解决方案。