【数据结构】中缀表达式构造二叉树转换成后缀表达式

#include "stdio.h"  
#include "string.h"  
#include "stdlib.h"  
#include "stack"  
using namespace std;  
  
const char str[] = "3*4+5-2/1";  
  
struct tree  
{  
    char c;  
    struct tree* left;  
    struct tree* right;  
};  
stack<struct tree*> subTreeStack;  
stack<char> operatorStack;  
  
  
struct tree*  BuildTree()  
{   
  
    struct tree* node;  
    for (unsigned int pos = 0; pos < strlen(str); pos++)  
    {  
        if (str[pos] - '0' >= 0 && str[pos] - '0' <= 9)    //若是数字则作为叶子节点  
        {  
  
            node = (struct tree*) malloc(sizeof(struct tree));  
            node->c = str[pos];  
            node->left = NULL;  
            node->right = NULL;  
              
          
              
            subTreeStack.push(node);  
        }  
        else if (str[pos] == '*' || str[pos] == '/' || str[pos] == '+' || str[pos] == '-')  
        {  
            if (!operatorStack.empty() && (str[pos] == '+' || str[pos] == '-'))  //若优先级比栈顶元素低  
            {  
                node = (struct tree*) malloc(sizeof(struct tree));  
                node->c = operatorStack.top();  
                node->right = subTreeStack.top();  
                subTreeStack.pop();  
                node->left = subTreeStack.top();  
                subTreeStack.pop();  
                  
                subTreeStack.push(node);  
              
  
                operatorStack.pop();  
                operatorStack.push(str[pos]);  
            }  
            else  
                operatorStack.push(str[pos]);  
        }  
      
      
    }  
      
      
    while(!operatorStack.empty())  
    {  
      
        node = (struct tree*) malloc(sizeof(struct tree));  
        node->c = operatorStack.top();  
        operatorStack.pop();  
        node->right = subTreeStack.top();  
        subTreeStack.pop();  
        node->left = subTreeStack.top();  
        subTreeStack.pop();  
          
        subTreeStack.push(node);  
      
    }  
    return subTreeStack.top();  
  
}  
void PrintTree(struct tree* node)  
{  
    if (node == NULL)  
        return;  
    PrintTree(node->left);  
    printf("%c", node->c);  
    PrintTree(node->right);  
}  
  
  
void main()  
{  
    struct tree* root = BuildTree();  
    PrintTree(root);  
}  

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值