使用c++语言,将已知先序序列的表达式二叉树还原成含小括号的中缀表达式
时间: 2024-02-18 17:06:26 浏览: 39
mov eax, 1
xor ebx, ebx
int 0x80
section .rodata
menu db "请选择好的,下面是使用 C++ 语言实现的代码:
```cpp
#include <iostream>
#include <sstream>
#include以下子功能:", 0xA, \
"1. 小写字母向大写字母的转换", 0 <string>
#include <stack>
using namespace std;
class TreeNode {
public:
string val;
TreeNode* left;
TreeNode* rightxA, \
"2. 大写字母向小写字母的转换", 0xA, \
"3.;
TreeNode(string v) : val(v), left(nullptr), right(nullptr) {}
};
// 递归实现,将表达式 二进制数向十六进制数的转换", 0xA, \
"4. 十六进制数二叉树转化为中缀表达式
string toInfixExpression(TreeNode* root) {
if (root == nullptr)向二进制数的转换", 0xA, \
"5. 十六进制数向十进制数的 {
return "";
}
if (root->left == nullptr && root->right == nullptr) {
return root->val;
转换", 0xA, \
"按 q 键退出程序", 0xA, 0
menu_len equ $ - menu }
string leftStr = toInfixExpression(root->left);
string rightStr = toInfixExpression(root->right);
return
prompt1 db "请输入小写字母:", 0
prompt1_len equ $ - prompt1
prompt2 db "请输入 "(" + leftStr + root->val + rightStr + ")";
}
// 根据先序遍历重建表达式二叉树大写字母:", 0
prompt2_len equ $ - prompt2
prompt3 db "请输入二进制数:",
TreeNode* buildExpressionTree(const string& str) {
if (str.empty()) {
return nullptr;
}
stack<TreeNode*> 0
prompt3_len equ $ - prompt3
prompt4 db "请输入十六进制数:", 0
prompt4 stk;
for (int i = str.size() - 1; i >= 0; i--) {
char c = str[i_len equ $ - prompt4
prompt5 db "请输入十六进制数:", 0
prompt5_len equ $ - prompt];
if (isdigit(c)) {
// 如果是数字,一直往前找,直到整个数字都被找到5
result db "转换后的结果为:", 0xA, 0
result_len equ $ - result
error db
int num = 0;
int j = i;
while (j >= 0 && isdigit(str[j])) {
"输入错误,请重新输入!", 0xA, 0
error_len equ $ - error
```
该程序使用了x86 num = num * 10 + (str[j] - '0');
j--;
}
string numStr = to_string(num);
汇编语言实现,实现了与Python程序相同的五种子功能。程序使用了Linux系统调用来实现输入、输出和错误处理等功能。程序包含一个循环,直到用户选择退出程序,程序才会 stk.push(new TreeNode(numStr));
i = j + 1; // 更新 i 的值
}
else if (结束。