C语言数据结构实验——二叉树转换为等价的中缀表达式

一、实验目的

1.掌握使用VC++或VS2012上机调试线性表的基本方法;

2.掌握二叉树的运算在链式存储结构上的实现。

3.了解二叉树的特点,理解先序中序后序的递归及非递归算法。

4.掌握二叉树的应用。


二、实验内容

请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。

注意

  • 树中至少包含一个运算符。
  • 当运算符是负号时,左儿子为空,右儿子为需要取反的表达式。
  • 树中所有叶节点的值均为非负整数。

例如,当下列两棵表达式树作为算法的输入时:

输出的等价中缀表达式分别为(a+b)*(c*(-d))(a*b)+(-(c-d))


三、代码

废话少说,上代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//树节点的结构
struct TreeNode {
    char data;
    struct TreeNode* left;
    struct TreeNode* right;
};

//创建新的树节点
struct TreeNode* createNode(char data) {
    struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;
    return newNode;
}

//将树转换为中缀表达式并输出
void convert(struct TreeNode* root) {
    if (root == NULL) {
        return;
    }
    if (root->left != NULL || root->right != NULL) {
        printf("(");
    }
    convert(root->left);
    printf("%c", root->data);
    convert(root->right);
    if (root->left != NULL || root->right != NULL) {
        printf(")");
    }
}

int main() {
    //构建一个给定的树
    /*
	     +
	  /    \
     *      -
	/ \    / \
   A   B  C   D
	*/
    struct TreeNode* root = createNode('+');
    root->left = createNode('*');
    root->left->left = createNode('A');
    root->left->right = createNode('B');
    root->right = createNode('-');
    root->right->left = createNode('C');
    root->right->right = createNode('D');

    //将树转换为中缀表达式并输出
    convert(root);
    printf("\n");

    return 0;
}

 运行,输出:

((A*B)+(C-D))

上述代码中,我们首先定义了一个表达式树的结构,包含数据和左右子节点。然后,我们使用createNode函数创建了一个给定的表达式树。最后,我们使用convert函数将表达式树转换为中缀表达式,并输出结果。在输出中,我们使用括号来反映操作符的计算次序。

这个题不算难,我写的也很简单。朋友,希望它对你有一点帮助。

猜你喜欢

转载自blog.csdn.net/m0_74137767/article/details/134272342