思路:先把输入的中缀表达式转化为后缀表达式,再通过后缀表达式来建立一颗表达式二叉树,最后正向打印二叉树。
正向打印二叉树的思路已写在_initPos_函数中,具体参见注释。
#include <bits/stdc++.h>
using namespace std;`在这里插入代码片`
struct node
{
//节点类
char value;
node *left;
node *right;
int level = 0;//节点的行坐标
int column = 10;//节点的列坐标 默认为10
node(char _a, node *_l = NULL, node *_r = NULL)
{
//节点类的构造函数
value = _a;
left = _l;
right = _r;
}
};
class Tree
{
//二叉树类
private:
stack<node*> lake;//用于在构建二叉树时保存子树的栈
node *myroot;//树根
char draw[100][100];//画板 默认时全都为空格字符
int Cmin = 100; //二叉树的最左边的y坐标
int Cmax = 0;//二叉树最右边的y坐标 列坐标
int Lmax = 0;//二叉树的最大x坐标 即行坐标
public:
Tree()
{
//二叉树的构造函数
_initD_();//初始化画板数组
myroot = NULL;//初始化根节点
}
void _initD_(){
//画板数组的初始化函数
for (int i = 0; i < 100; i++){
for (int j = 0; j < 100; j++){
draw[i][j] = ' ';//默认全都置空
}
}
}
node *front()
{
//头节点的访问函数
return myroot;
}
void creatTreeByMidExpression(string midexp)
{
//通过中缀表达式建立二叉树
string s = TransToAfexp(midexp);//把中缀表达式转化为后缀表达式 便于之后的处理
for (int i = 0; i < s.length(); i++)
{
node* father = NULL;
node *