能给一个c++版本的代码吗
时间: 2024-03-06 11:46:25 浏览: 16
当然,下面是一个示例 C++ 代码,用于将中缀表达式转换为表达式树:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
class Node {
public:
char value;
Node* left;
Node* right;
Node(char v) : value(v), left(nullptr), right(nullptr) {}
};
Node* build_expression_tree(string postfix_expression) {
stack<Node*> s;
string operators = "+-*/";
for (char c : postfix_expression) {
if (operators.find(c) == string::npos) {
Node* node = new Node(c);
s.push(node);
}
else {
Node* right = s.top(); s.pop();
Node* left = s.top(); s.pop();
Node* node = new Node(c);
node->left = left;
node->right = right;
s.push(node);
}
}
return s.top();
}
void inorder_traversal(Node* root) {
if (root) {
inorder_traversal(root->left);
cout << root->value << " ";
inorder_traversal(root->right);
}
}
int main() {
string postfix_expression = "ab+cde+**";
Node* root = build_expression_tree(postfix_expression);
inorder_traversal(root);
return 0;
}
```
这个程序使用一个栈来构建表达式树。在处理后缀表达式时,如果当前字符是操作数,则将其转换为一个节点,并将其推入栈中。如果当前字符是操作符,则从栈中弹出两个节点作为其左右子节点,然后将新的节点推入栈中。最终,栈中只剩下一个节点,即为表达式树的根节点。程序还提供了一个中序遍历函数 inorder_traversal(),用于验证表达式树是否正确。