Ich habe Code geschrieben, um einen Ausdrucksbaum in Vorbestellung und Postorder umzuwandeln, aber ich habe Mühe, den Ausdrucksbaum aus einem Infix-Ausdruck zu erstellen. Ich habe eine .cc-Datei, die die Funktion build_expression_tree aufruft, die Konvertierungsfunktionen aufruft und die konvertierten Ausdrücke ausgibt.Infix-Ausdruck in einen Stapel lesen
Dies ist meine aktuelle Nicht-Arbeitsfunktion:
void Expression_Tree::build_expression_tree(char input[], int size)
{
for (int i = 0; i < size; i++)
{
if (input[i] == ' ')
{
i++;
}
if(input[i] >= '0' && input[i] <= 9)
{
ETNode *temp = new ETNode;
temp->left = temp->right = NULL;
temp->input = input[i];
tree_stack.push(temp);
}
else if (input[i] == '(')
{
ETNode *temp = new ETNode;
temp->left = temp->right = NULL;
temp->input = input[i];
tree_stack.push(temp);
}
else if (input[i] == ')')
{
while (tree_stack.top() != '(')
{
temp->right = tree_stack.top();
tree_stack.pop();
temp->left = tree_stack.top();
tree_stack.pop();
tree_stack.pop();
tree_stack.push(temp);
}
}
else if (input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/')
{
while (!tree_stack.empty())
{
ETNode *temp = new ETNode;
temp->left = temp->right = NULL;
temp->input = input[i];
tree_stack.push(temp);
temp->right = tree_stack.top();
tree_stack.pop();
temp->left = tree_stack.top();
tree_stack.pop();
tree_stack.push(temp);
}
}
}
}
Die Fehler ich an dieser Stelle bekommen sind: Expression_Tree.h: 61: 40: Fehler: ISO C++ verbietet Vergleich zwischen Zeiger und integer
while(tree_stack.top() != '(')
Expression_Tree.h: 62: 13: Fehler: 'Temp' wurde nicht in diesem Bereich erklärt
temp->right = tree_stack.top();
Expression_Tree.h: 62: 13: Fehler: ‚Temp‘ wurde in diesem Rahmen
temp->left = tree_stack.top();
Ich weiß, warum die letzten beiden Fehler (nicht im Gültigkeitsbereich deklariert) auftreten, aber ich weiß nicht erklärt einfach nicht wissen, was zu tun ist, um es zu beheben, während ich meinen Code richtig arbeiten lasse.
Ich weiß nicht einmal, ob mein Code völlig falsch ist, aber irgendwelche Tipps würden unglaublich geschätzt werden! Danke.
EDIT: Dies sind die Klassen, die die Build_Expression_Tree-Funktion beeinflussen.
class ETNode {
public:
char input;
ETNode *left, *right;
};
class Expression_Tree {
public:
Expression_Tree() { root = 0; };
~Expression_Tree() { clear(root); }
void build_expression_tree(char[], int);
void inorder() { inorder(root); }
void preorder() { preorder(root); }
void postorder() {postorder(root); }
private:
ETNode* root;
std::stack<ETNode*> tree_stack;
void visit(ETNode* p) { std::cout << p->input << " "; }
void inorder(ETNode*);
void preorder(ETNode*);
void postorder(ETNode*);
void clear(ETNode*);
};
zu arbeiten zeigen Sie uns, was 'tree_stack' und' ETNode' sind – vu1p3n0x
@ vu1p3n0x ich die Post bearbeitet haben – user6276841
können Sie klären, verwenden Sie nur der Stapel als Bauhilfe? und verwende nur "root" für alle anderen Operationen? Oder brauchst du den Stapel auf irgendeine Art und Weise? – vu1p3n0x