标签:而且 生成 ack 一个 [] .com lse 条件语句 tac
void InitExpTree(BTree &T,string str)
建op栈,op.push(‘#‘)
初始化根节点栈:stacktree栈
while(表达式未结束)
{
if(str[i]==数字字符) 生成一个只有根节点的子树T。stacktree.push(T)
if(str[i]==运算符)
{
while(str[i]<op栈顶运算符)栈顶优先级别高
{ 创建一个树结点T,数据为op.top()
stacktree弹出2个根节点T1,T2
T->lchild=T1;T->rchild=T2;
stacktree.push(T);
}
if(str[i]>op栈顶元素运算符) op.push(str[i])
if(str[i]==op栈顶运算符) op.pop().
}
double EvaluateExTree(BTree T)
{
if(T==NULL) return 0;
if(T->data为数字字符) return T->data-‘0‘
else{
switch(T->data){
+:return EvaluateExTree(T->lchild) + EvaluateExTree(T->rchild); break;//递归结束标志
-:return EvaluateExTree(T->lchild) - EvaluateExTree(T->rchild); break; //递归结束标志
*:return EvaluateExTree(T->lchild) * EvaluateExTree(T->rchild); break; //递归结束标志
/:if((EvaluateExTree(T->rchild)==0)) 输出divide 0 error exit(0) break;
else return EvaluateExTree(T->lchild) / EvaluateExTree(T->rchild); break; //递归结束标志
}
BTNode*CreateBT(char *pre,char *in,int n)//根据先序和中序建立二叉树
{
若n<=0,返回空指针,递归结束
创建根节点BT,BT->data=*pre;
查找根节点在中序序列的位置k;
创建左子树:BT->lchild=CreateBT(pre+1.in,k)
创建右子树:BT->rchild=CreateBT(pre+k+1,in+k+1,n-k-1)
返回BT
}
BTNode *trans(string a,int i,int maxsize)//顺序结构转链式结构
{
if(i>字符串长度maxsize-1||i<=0) return NULL
if(a[i]==‘#‘) return NULL
创建根节点BT,BT->data=a[i]
创建左子树:BT->lchild=trans(a,2*i,maxsize)
创建右子树:BT->rchild=trans(a,2*i+1,maxsize)
返回BT
}
int hfmswpl(BTNode* FBT,int h)//叶子结点带权路径长度和
{
if(FBT为空) return 0 递归结束
esle{
if(FBT是叶子结点)
{
求和:sum=sum+FBT->data*h (sum为全局变量int型,初值为0)
}
左子树递归:hfmswpl(FBT->lchild,h+1)
右子树递归:hfmswpl(FBT->rchild,h+1)
}
部分正确:
void levelnumber(BTNode *b,int h,int a[])
{
if(b==NULL) return ;
else
{
a[h]++;
levelnumber(b->lchild,h+1,a);
levelnumebr(b->rchild,h+1,a);
}
}
int fun(BTNode *b)
{
int width=0,i;
int a[MaxSize];
for(i=1;i<MaxSzie;i++) a[i]=0;
levelnumber(b,1,a);
i=1;
while(a[i]!=0)
{
if(a[i]>width) width=a[i];
i++;
}
return width;
}
标签:而且 生成 ack 一个 [] .com lse 条件语句 tac
原文地址:https://www.cnblogs.com/wlgczjw/p/8994591.html