利用c++(1)定义二叉树的结点结构。 (2)创建表达式二叉树。 (3)先序遍历表达式二叉树得到表达式的前缀表示。 (4)中序遍历表达式二叉树得到表达式的中缀表示。 (5)后序遍历表达式二叉树得到表达式的后缀表示。 (6)计算表达式的值。
时间: 2024-12-08 21:22:26 浏览: 33
(1) 在C++中定义一个简单的二叉树节点结构,通常包括三个字段:左孩子、右孩子和数据值。例如:
```cpp
struct TreeNode {
int val; // 节点值
TreeNode* left; // 左孩子指针
TreeNode* right; // 右孩子指针
};
```
(2) 创建表达式二叉树,例如如果我们要存储加法和乘法运算,可以这样构建:
```cpp
TreeNode* createExpressionTree(char op, TreeNode* left = nullptr, TreeNode* right = nullptr) {
TreeNode* node = new TreeNode();
node->val = op;
node->left = left;
node->right = right;
return node;
}
```
(3) 先序遍历(根-左-右)对于表达式树通常用于生成前缀表达式,从根开始递归:
```cpp
std::string prefixTraversal(TreeNode* root) {
if (!root) return "";
std::stringstream ss;
ss << root->val;
ss << prefixTraversal(root->left);
ss << prefixTraversal(root->right);
return ss.str();
}
```
(4) 中序遍历(左-根-右)对于中缀表达式,同样递归:
```cpp
std::string infixTraversal(TreeNode* root) {
if (!root) return "";
return infixTraversal(root->left) + std::to_string(root->val) + infixTraversal(root->right);
}
```
(5) 后序遍历(左-右-根),用于后缀表达式:
```cpp
std::string postfixTraversal(TreeNode* root) {
if (!root) return "";
return postfixTraversal(root->left) + postfixTraversal(root->right) + std::to_string(root->val);
}
```
(6) 计算表达式值需要处理不同的操作符,比如栈或者递归方法。下面是一个基本的示例,假设我们已经有了一个函数 `evalPostfix` 来计算后缀表达式:
```cpp
int calculateValue(std::string postfixExpr) {
stack<int> s;
for (char c : postfixExpr) {
if (isdigit(c)) {
s.push(c - '0');
} else {
int b = s.top(); s.pop();
int a = s.top(); s.pop();
switch (c) {
case '+': s.push(a + b); break;
case '-': s.push(a - b); break;
case '*': s.push(a * b); break;
case '/': s.push(a / b); break;
// 添加更多运算符
}
}
}
return s.top();
}
```
阅读全文