• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: C/C++
  • 标签:

资源简介

表达式树是二叉树的一种应用,叶子是操作数,其余结点为操作符。例如,下图表示的表达式树,用中序遍历得到中序表达式 (a+b*c)+((d*e+f)*g)请编程实现表达式树的建立和遍历

资源截图

代码片段和文件信息

#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 100
#define STACK_INIT_SIZE     100  
#define STACKINCREMENT      100  
typedef char Elemtype;
typedef struct
{
Elemtype *elem;
int  length;
int listsize;
}SqList;
typedef char TElemtype;

typedef struct BiTNode
{
TElemtype data;
struct BiTNode *lchild*rchild;
}BiTNode*BiTree;

typedef char SElemtype;
typedef struct
{
SElemtype *base;
SElemtype *top;
int stacksize;
}SqStack;

void InitBiTree(BiTree &T) //初始化二叉树T 
{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)exit(-2);


BiTNode* predicate(SqList &Lint fristint last) //还要考虑小括号在最外层的情况
{
BiTree T1;
if(last-frist==1)
{
BiTree Ty;
  InitBiTree(Ty);
Ty->data=L.elem[frist];
Ty->lchild=NULL;
Ty->rchild=NULL;
return Ty;
}
int flag=0jt=0ct=0t=0;
for(int i=frist;i {
if(L.elem[i]==‘(‘)flag++;
else if(L.elem[i]==‘)‘)flag--;

if(flag==0){
            if(L.elem[i]==‘+‘||L.elem[i]==‘-‘)
jt=i;
else if(L.elem[i]==‘*‘||L.elem[i]==‘/‘)
ct=i;
}
}
if((ct==0)&&(jt==0))
T1=predicate(Lfrist+1last-1); 
else{
if(jt>0)t=jt;
else if(ct>0)t=ct;
InitBiTree(T1);
T1->data=L.elem[t];
T1->lchild=predicate(Lfristt);
T1->rchild=predicate(Lt+1last);
}
return T1;
}

void InitList(SqList &L)  

    L.elem = (Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));  
    if(!L.elem)exit(-2);  
    L.length=0;  
    L.listsize=LIST_INIT_SIZE;    


void PreOrderTraverse (BiTree T) //先序遍历二叉树T    
{
if(T==NULL)
{
return;
}
else
{ printf(“%c “T->data);
PreOrderTraverse (T->lchild);
PreOrderTraverse (T->rchild);
}
}

void InOrderTraverse (BiTree T) //中序遍历二叉树T
{
if(T==NULL)
{
return;
}
else
{
InOrderTraverse (T->lchild);
printf(“%c “T->data);
InOrderTraverse (T->rchild);
}
}  

void PostOrderTraverse (BiTree T) //后序遍历二叉树T
{
if(T==NULL)
{
return;
}
else
{
PostOrderTraverse (T->lchild);
PostOrderTraverse (

评论

共有 条评论

相关资源