将一个不带括号的算术表达式存入二叉树里用C语言
时间: 2023-12-03 17:45:35 浏览: 93
以下是一个示例代码,可以将不带括号的算术表达式存入二叉树中:
```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
// 定义二叉树结点
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
}TreeNode;
// 创建二叉树结点
TreeNode* createNode(char data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 将表达式存储到二叉树中
TreeNode* expressionToTree(char* expression, int start, int end) {
if (start > end) {
return NULL;
}
TreeNode* root = createNode(expression[start]);
int i;
int flag = 0; // 标记是否有括号
for (i = start + 1; i <= end; i++) {
if (isdigit(expression[i])) {
if (flag == 0) { // 左子树
root->left = createNode(expression[i]);
}
else { // 右子树
root->right = createNode(expression[i]);
}
}
else if (expression[i] == '(') {
int j = i + 1;
int count = 1;
while (count != 0) {
if (expression[j] == '(') {
count++;
}
else if (expression[j] == ')') {
count--;
}
j++;
}
i++;
flag = 1; // 右子树有括号
root->right = expressionToTree(expression, i, j - 2);
i = j - 1;
}
}
return root;
}
// 中序遍历二叉树
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%c ", root->data);
inorderTraversal(root->right);
}
int main() {
char expression[100];
printf("请输入不带括号的算术表达式:");
scanf("%s", expression);
int length = strlen(expression);
TreeNode* root = expressionToTree(expression, 0, length - 1);
printf("中序遍历结果为:");
inorderTraversal(root);
printf("\n");
return 0;
}
```
示例输入:
```
请输入不带括号的算术表达式:a+b*c-d/e
```
示例输出:
```
中序遍历结果为:a + b * c - d / e
```
该代码实现了将不带括号的算术表达式存储到二叉树中,并输出中序遍历结果。在实际使用时,还需要根据具体需求进行修改和完善。
阅读全文