用c++建立表达式二叉树并计算其结果(即输入一个四则混合运算表达式并计算出正确结果)
时间: 2023-12-17 22:05:30 浏览: 154
基于C++的二叉树实现
好的,我可以帮你解答这个问题。
首先,我们需要定义一个二叉树节点的结构体,包括一个值、左右子节点指针。
```c++
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char c) : val(c), left(nullptr), right(nullptr) {}
};
```
然后,我们需要定义一个函数来构建表达式二叉树。该函数将表达式转换为后缀表达式,并使用栈来构建二叉树。
```c++
TreeNode* buildExpressionTree(string& s) {
stack<TreeNode*> st;
for (int i = 0; i < s.size(); ++i) {
char c = s[i];
if (isdigit(c)) {
st.push(new TreeNode(c));
} else {
TreeNode* node = new TreeNode(c);
node->right = st.top();
st.pop();
node->left = st.top();
st.pop();
st.push(node);
}
}
return st.top();
}
```
接下来,我们需要定义一个递归函数来计算表达式二叉树的结果。对于每个节点,如果它是一个数字节点,直接返回该数字;如果它是一个操作符节点,递归计算其左右子树的结果,并根据操作符计算出当前节点的结果。
```c++
int calculate(TreeNode* root) {
if (root == nullptr) {
return 0;
}
if (root->left == nullptr && root->right == nullptr) {
return root->val - '0';
}
int left = calculate(root->left);
int right = calculate(root->right);
switch (root->val) {
case '+': return left + right;
case '-': return left - right;
case '*': return left * right;
case '/': return left / right;
}
return 0;
}
```
最后,我们可以将上述函数组合在一起,并输入一个表达式字符串,以计算其结果。
```c++
int main() {
string s = "1+2*3-4/2";
TreeNode* root = buildExpressionTree(s);
int result = calculate(root);
cout << result << endl; // 输出 5
return 0;
}
```
希望这个例子能够帮助你理解如何用 C++ 建立表达式二叉树并计算其结果。
阅读全文