数据结构复习4.1 后缀表达式转中缀表达式与前缀表达式- 二叉树实现

之前总结了利用栈来将中缀表达式转为后缀与前缀表达式的规则(中缀表达式转前/后缀规则),并且附上了代码。最近复习到了树,正好使用二叉树来实现一下。

表达式树

表达式长成下面这个样子:
下图为:
后缀表达式 :ACB*+D/ 的表达式树。
前缀表达式为:/ + A * C B D
中缀表达式为: A + C * B / D
在这里插入图片描述

如何构造表达式树

从左到右遍历表达式,如果遇到操作数则推入栈中,如果为操作符则将占中的操作数拿出,再以操作符为根构建一棵树,此后将刚刚构建的以操作符为根的二插入放入栈中。
步骤如下所示:

  1. 以后缀表达式 ACB*+D/为例,从左到右开始遍历,前三个都是操作, 先创建操作数节点,之后再将节点放入栈中。
    如下所示:
    在这里插入图片描述
  2. 随着遍历的执行,会遇到操作符 *(乘号),接下来我们需要pop两次,将B和Cpop出来,以乘号为根,构建二叉树。
    如下图所示:
    在这里插入图片描述
  3. 将根节点放入栈中。
    在这里插入图片描述
  4. 继续向后遍历,如此往复之后完成遍历。最后栈中会有一个根节点。将根节点拿出后,可以得到一整棵表达式树。

实现

//
//  Expression_Tree.c
//  Data_structure
//
//  Created by 양송 on 2020/05/30.
//  Copyright © 2020 양송. All rights reserved.
//

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

#define Stack_Size 20

typedef struct node
{
   
   
    char data;
    struct node* left;
    struct node* right;
}Bin_T;

Bin_T* Stack[Stack_Size];
int Top = -1;

int Stack_Empty()
{
   
   
    if(Top == -1)
    {
   
   
        return 1;//return empty
    }
    else
        return 0;
}

int Stack_Full()
{
   
   
    if(Top == Stack_Size-1)
    {
   
   
        return 1; // return full
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值