用C语言,创建二叉链表方式的二叉树,并以运算实现
时间: 2023-08-12 20:06:02 浏览: 125
二叉树的二叉链表存储表示-严蔚敏数据结构C语言版教材讲义
好的,下面是用C语言创建二叉链表的方式实现二叉树,并以运算实现的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点结构体
typedef struct treeNode {
char data; // 结点数据
struct treeNode *leftChild, *rightChild; // 左右子树指针
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
char data;
scanf("%c", &data);
if (data == '#') { // '#'代表空结点
return NULL;
}
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->leftChild = createTree();
newNode->rightChild = createTree();
return newNode;
}
// 计算二叉树表达式的值
int calculate(TreeNode* root) {
if (root->leftChild == NULL && root->rightChild == NULL) { // 如果是叶子结点,直接返回结点数据
return root->data - '0'; // 将字符转换为数字
}
int leftVal = calculate(root->leftChild); // 计算左子树的值
int rightVal = calculate(root->rightChild); // 计算右子树的值
switch (root->data) { // 根据运算符计算结果
case '+':
return leftVal + rightVal;
case '-':
return leftVal - rightVal;
case '*':
return leftVal * rightVal;
case '/':
return leftVal / rightVal;
default:
return 0;
}
}
int main() {
printf("请输入二叉树表达式(例如:1+2*3#):");
TreeNode* root = createTree();
int result = calculate(root);
printf("结果为:%d\n", result);
return 0;
}
```
在这个示例代码中,我们定义了一个二叉树结点结构体,包含了结点数据和左右子树指针。然后通过递归的方式创建二叉树,其中 '#'代表空结点。最后,我们通过递归计算二叉树表达式的值,并根据运算符计算结果。
阅读全文