Ich habe eine Vorlage von Stack und eine Vorlage von TreeNode (Binary Tree). Es folgt der Code von zwei Klassen (Stack und TreeNode). Ich habe erfolgreich Daten in den Baum eingefügt, indem ich die insert() -Funktion verwendet habe, aber es gibt ein Problem, wenn ich es mit dem Stack zurückgeholt habe. Es folgen die Kompilierzeitfehler:Stack Vorlage hat einige logische Fehler für die Implementierung von binären Baum
Fehler 1 Fehler C2143: Syntaxfehler: fehlende ';' vor '*' c: \ users \ computerhaus \ desktop \ baum 1 \ baum 1 \ source.cpp 8 1 Baum 1
Fehler 2 Fehler C4430: fehlender Typ Specifier - int angenommen. Hinweis: \ users \ Computer Haus \ Desktop \ tree 1 \ tree 1 \ source.cpp 8 1 Baum 1
#include<iostream>
#include<stdlib.h>
using namespace std;
template<class T>
class Stack{
private:
TreeNode<T> *headNode, *pastCurrentNode;
public:
Stack(){
headNode = new TreeNode<T>;
headNode=NULL;
}
void push(T x){
TreeNode<T>* newNode = new TreeNode<T>;
newNode->set(x);
if(headNode != NULL){
newNode->setNext(headNode);
pastCurrentNode=headNode;
headNode=newNode;
}
else{
headNode=newNode;
pastCurrentNode=headNode;
}
}
T pop(){
TreeNode<T>* p = new TreeNode<T>;
p = headNode;
headNode = pastCurrentNode;
T x = p->get();
delete p;
return x;
}
T top(){return headNode->get();}
bool isEmpty(){return (headNode == NULL);}
};
template<class T>
class TreeNode{
private:
TreeNode* right, *left;
T* object;
public:
TreeNode(){
this->left = this->right = NULL;
object = NULL;
}
TreeNode(T* object){
this->object = object;
this->left = this->right = NULL;
}
T* getInfo(){
return this->object;
}
void setInfo(T* object){
this->object = object;
}
TreeNode* getLeft(){return this->left;}
void setLeft(TreeNode* left){this->left = left;}
TreeNode* getRight(){return this->right;}
void setRight(TreeNode* right){this->right = right;}
int isLeaf(){
if(this->left==NULL && this->right == NULL){
return 1;
}
return 0;
}
};
void insert(TreeNode<int>* root, int* info){
TreeNode<int>* newNode = new TreeNode<int>(info);
TreeNode<int>*p, *q;
p = q = root;
while(*info != *p->getInfo() && q != NULL)
{
p = q;
if(*info < *p->getInfo())
q = p->getLeft();
else
q = p->getRight();
}
if(*info == *p->getInfo()){
cout<<"Error: Duplication: "<<*info<<endl;
delete newNode;
}
else if(*info < *p->getInfo()){
p->setLeft(newNode);
}
else{
p->setRight(newNode);
}
}
void sInOrder(TreeNode<int>* root){
Stack< TreeNode<int>* > stack;
TreeNode<int>* p;
p=root;
do{
while(p != NULL){
stack.push(p);
p = p->getLeft();
}
//At this point left tree is empty
if(! stack.isEmpty()){
p = stack.pop();
cout<<*p->getInfo()<<" ";
//go back and traverse right subtree
p = p->getRight();
}
}
while(!stack.isEmpty() || p!=NULL);
}
int main(){
int x[]={14,15,4,9,7,18,3,5,16,4,20,17,9,14,5,-1};
TreeNode<int>* root = new TreeNode<int>;
root->setInfo(&x[0]);
for(int i=1; x[i]>0; i++){
insert(root, &x[i]);
}
cout<<"\nStacked In Order: "; sInOrder(root);
cout<<endl;
system("pause");
}
Sir ich konnte diese Lösung nicht verstanden. können Sie bitte die Details des gelösten Codes Snipet –
@ZeshanSajid bereitstellen, siehe das Update. –