将表达式转化为二叉树

本文介绍了如何将数学表达式转化为二叉树,通过使用两个栈,一个存储操作符,另一个存储节点。提供了一个C++实现,包括Stack和BiTree的数据结构,以及创建和前序遍历二叉树的函数。代码中处理了操作符优先级和括号的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来挺简单一个问题结果折腾了有几天。

网上也没有比较合理的答案。

需要两个栈,一个栈存储操作符,另一个栈存储树或者节点。

代码如下:

main:

#include"Expression_bitree.h"
Status print(Data i)
{
 using namespace std;
 if (i.ischar)
  cout << (char)i.data;
 else
  cout << i.data;
 system("pause");
 return OK;
}
int main()
{
 using namespace std;
 BiTree pine = NULL;
 CreateBiTree(pine, "1+2*(3-4)-5/6");
 cout << "create finished" << endl;
 system("pause");
 PreOrderTraverse(pine, print);
 system("pause");
}

Stack.h:

#ifndef STACK_H_
#define STACK_H_
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 5
#ifndef Status
#define Status int
#define OK 1
#define ERROR 0
#define OVERFLOW 2
#endif
#include<cstdlib>
#include<malloc.h>
template<class sElemType>
class Stack
{
private:
 sElemType* base;
 sElemType* top;
 int stacksize;
public:
 Stack();
 ~Stack();
 Status ClearStack();
 bool StackEmpty();
 int StackLength() { return stacksize; }
 Status GetTop(sElemType & e);
 Status Push(sElemType e);
 Status Pop(sElemType & e);
 Status StackTraverse(Status(*visit)(sElemType t));
};
template<class sElemType>
Stack<sElemType>::Stack()
{
 base = (sElemType*)malloc(STACK_INIT_SIZE*sizeof(sElemType));
 if (!base) exit(OVERFLOW);
 top = base;
 stacksize = STACK_INIT_SIZE;
}
template<class sElemType>
Status Stack<sElemType>::GetTop(sElemType & e)
{
 if (top == base) return ERROR;
 e = *(top - 1);
 return OK;
}
template<class sElemType>
Status Stack<sElemType>::Push(sElemType e)
{
 if (top - base >= stacksize)
 {
  base = (sElemTyp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值