Это является AVL Tree C++ программа и имеет следующие ресурсы:ошибка C2661: «узел :: узел»: не перегруженная функция принимает 3 аргумента
"TreeNode.h"
"AVLTree.h"
"AVLTree.cpp"
"Main.cpp"
Я добавил «TreeNode.cpp» и принял функция «узел :: узел» от «AVLTree.cpp» и поместить его в «TreeNod.cpp», включали в себя «TreeNode.h» и после компиляции, VS 2013 бросает меня ошибка C2661 для линии:
n = new node(x, NULL, NULL);
Функция, соответствующая ошибке в «AVLTree.cpp»:
void tree::insert(int x, node* &n)
{
if (n == NULL)
n = new node(x, NULL, NULL);
else if (x < n->data)
{
insert(x, n->l);
if (n->l != NULL && n->r != NULL && n->l->height - n->r->height == 2)
{
if (x < n->l->data)
rightrotation(n);
else
doublerotation_leftright(n);
}
}
else if (x > n->data)
{
insert(x, n->r);
if (n->r != NULL && n->l != NULL && n->r->height - n->l->height == 2)
{
if (n->r->data < x)
leftrotation(n);
else
doublerotation_leftright(n);
}
}
n->height = maxi(n->l, n->r) + 1;
}
"TreeNode.cpp":
#include "TreeNode.h"
node::node(int x, node *newleft, node *newright, int h = 0)
{
data = x;
l = newleft;
r = newright;
height = h;
}
"AVLTree.h":
#include "TreeNode.h"
#pragma once
class tree
{
public:
tree();
~tree();
void insert(int x);
bool pop(int n);
void printpostorder();
void printlevelorder();
private:
node* head;
node* nullnode;
void destruct(node* n);
node* findnode(int n);
node* min(node* n);
node* Bfind(int n);
void rightrotation(node* &k2);
void leftrotation(node* &k2);
void doublerotation_leftright(node* &k3);
void postorder(node* n);
void levelorder(node* n);
void insert(int x, node* &n);
int maxi(node *x1, node *x2);
void balance(node* &n);
};
Где проблема?
Edit 1:
"TreeNode.h"
#pragma once
class node
{
public:
int data;
node* l;
node* r;
int height;
node(int x, node* newleft, node* newright, int h);
};
Показать 'TreeNode.h'. –
добавлен в конец сообщения ... – Bahador
Я добавил «0» к аргументам, и код был скомпилирован без ошибок! 'n = новый узел (x, NULL, NULL, 0);' не уверен, что то, что я сделал, имеет смысл! – Bahador