Ваша проблема в конструкторе:
class tree{
public:
node *root;
tree(){
root->left=NULL;
root->right=NULL;
}
Вы объявляете root
в классе, но никогда не инициализируете его. Поэтому, когда вы разыменовываете его в теле конструктора, вы разыменовываете указатель мусора, который может указывать на что угодно.
Строго говоря, то, что вы делаете, - это неопределенное поведение, и компилятор вполне может генерировать , что ему нравится или даже вообще ничего для этого бита кода.
Несвязанный нитпик: не используйте NULL
в новом коде, используйте nullptr
.