Я пишу дерево выражений.
Класс Node имеет свои экземпляры как члены left, right и parent.
Благодаря Джеймсу МакНеллису в этом посте , я объявил их указателями.
class Node
{
public:
char *cargo;
int depth;
Node *parent;
Node *left;
Node *right;
//constructors/destructor:
Node(void);
Node(int a_depth, Node *pparent = __nullptr);
~Node();
//method:
void traverse_tree(Node n)
};
Теперь я пытаюсь пройтись по дереву и распечатать его (в файл "out").
Рекурсивный вызов 'traverse_tree (left);' и 'traverse_tree (справа);'
вызывает сообщение об ошибке «невозможно преобразовать параметр 1 из« Узла * »в« Узел »».
Traverse_tree первоначально вызывается с корневым узлом в качестве аргумента.
Я думаю, что объявление параметра "(Node n)" сбивает с толку компилятор и он не знает
вызывать ли конструктор или нет.
Как передать "left" и "right" методу "traverse_tree"?
void Node::traverse_tree(Node n)
//utility to view the tree
{
if (((left) == __nullptr)||((right) == __nullptr))
{
return;
}
traverse_tree(right);
out<<' '<<n.cargo<<"\n";
traverse_tree(left);
return;
};