Первый поиск в глубине бинарного дерева поиска с использованием стека в переполнении стека

Я пытаюсь сделать DFS в двоичном дереве поиска, используя стек, но он дает ошибку, пожалуйста, помогите.

#include<iostream>

using namespace std;

class TreeNode{
private:
int data;
TreeNode *left;
TreeNode *right;
public:
TreeNode(){
data=-1;
left=right=NULL;
}
TreeNode(int n){
data=n;
left=right=NULL;
}
int getData(){
return data;
}
void setData(int n){
data=n;
}
void setLeft(TreeNode *left){
this->left=left;
}
void setRight(TreeNode *right){
this->right=right;
}
TreeNode *getLeft(){
return left;
}
TreeNode *getRight(){
return right;
}
void print(){
cout<<data<<"";
}
};

class Stack{
private:
TreeNode *nodes;
public:
int size;
int top;
Stack(int size){
top=0;
this->size=size;
nodes = new Treenode[size];
}

TreeNode pop(){
if (top == 0){
cout<<"Stack is empty"<<endl;
return -1;
}
top--;
return nodes[top];
}

TreeNode push(TreeNode *node){
if (top==size){
cout<<"Stack is full"<<endl;
return 0;
nodes[top]= *node;
top++;
}
}
};

class BST{
private:
TreeNode * root;
public:
BST(){
root=NULL;
}

void preorder(){
preorder(root);
cout<<endl;
}

void preorder(TreeNode *root){
if(root !=NULL){
root->print();
preorder(root->getLeft());
preorder(root->getRight());
}
}

void insert(int n){
TreeNode * newNode = new TreeNode(n);
if(root == NULL)
{
root = newNode;
}
else{
TreeNode *temp = root;
TreeNode *prev = NULL;
while(temp != NULL){
prev=temp;
if (n < temp->getData()){
temp=temp->getLeft();
}
else{
temp=temp->getRight();
}
if (n > prev->getData()){
prev->setRight( newNode );
}
else{
prev->setLeft( newNode );
}
}
}
}

void print(){
Stack *s= new Stack(50);
s->push(root);
while( s->size > 0 ){
TreeNode t = s->pop();
cout<<t.getData()<<"";
if(t.getLeft() != NULL){
s->push(t.getLeft());
}
if(t.getRight() != NULL){
s->push(t.getRight());
}
}
cout<<endl;
}
};

int main(){
int n;
BST *bst = new BST();
do{
cin>>n;
if( n == -1)
break;
bst->insert(n);
}while( true );

bst->print();
bst->preorder();
return 0;
}

Вот ошибки, которые я получаю:

testtree.cpp: In constructor ‘Stack::Stack(int)’:testtree.cpp:51: error: expected type-specifier before ‘Treenode’testtree.cpp:51: error: cannot convert ‘int*’ to ‘TreeNode*’ in assignmenttesttree.cpp:51: error: expected ‘;’ before ‘Treenode’

-1

Решение

Также эта строка недопустима, так как относится к размеру стека, а не к текущему количеству элементов в стеке:

while( s->size > 0 ){
....
}
4

Другие решения

У вас есть опечатка! Это TreeNodeне Treenode, Строка 51 должна гласить:

nodes = new TreeNode[size];

Обратите внимание, что вы получаете эту конкретную ошибку, поскольку неизвестные типы автоматически считаются типами int в C ++ (? — Я не на 100% в этом).

3

По вопросам рекламы [email protected]