c++用二叉树表示代数表达式_表达式二叉树构造和遍历(C)

该博客介绍了如何使用C++将中缀表达式转化为后缀表达式,并以此构造表达式二叉树。通过递归遍历验证二叉树的正确性,详细讲解了后缀表达式的转换规则以及建树过程。代码实现包括中缀转后缀、后缀表达式构建二叉树以及三种遍历方法。
摘要由CSDN通过智能技术生成

思想:

1.将输入的中缀表达式转化为后缀表达式。

2.用后缀表达式构造表达式二叉树。

3.检验二叉树是否创建成功。采用的是递归遍历,三种常规遍历先中后序遍历。

4.后缀表达式的转换:

86932b212681d1ea32a20304c548984b.png

优先级+-<*/<^<(),当a中的字符为数字时直接放入b,为运算符时根据优先级入栈(S1),优先级高的位于栈顶。()运算符较为特殊,当遇到左括号时入栈,直到遇到右括号才出栈,且出栈是括号里的所有元素。

5.后缀表达式建树过程:

假设输入:(a+b)*(c*(d+e)),转为后缀表达式为:ab+cde**,根据后缀表达式建立二叉树。

864cce99791078ae92d7ac2faeac17e4.png
(1)遇到ab。将指向两节点的指针压入栈中。

d729c094efd5e26080723ef1113a6bb3.png
(2)遇到操作数+,弹出指向两元素的指针,形成一棵树,将指向该树的指针压入栈中

31cceb2d60f97d508cf3b4bccb36a0e9.png
和(1)同

b71902daea6ad7e4be63efe5186fae83.png
和(2)同

5a23141b6db549f2885f26f68c38dd90.png
和(2)同

cfde57f80fd332cca1eb663adf2f779d.png
和(2)同

代码实现:

中缀转后缀:

void TransLate(Stack S, char a[], char b[]) {
    char ch, element = NULL;
    int i = 0, j = 0;
    ch = a[i++];
    while (ch != '0') {
        switch (ch) {
        case'('://左括号出现,右括号不出现就有符号入栈
            Push(S, ch);
            break;
        case')'://右括号出现,括号里面的所有符号出栈
            while (Top(S, &element) && element != '(') {
                Pop(S, &element);
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值