希赛教育计算机专业考研专业课辅导招生
希赛教育计算机专业考研专业课辅导视频
希赛教育计算机考研专业课在线测试系统
BiTree CrtExptree( char* exp )
{
// 建立由合法的表达式字符串 exp 确定的只含二元运算符的
// 非空表达式树返回其存储结构二叉链表的根结点指针
InitStack(S); Push(S#); // S为暂存运算符的栈
InitStack(PTRS);// PTRS为暂存子树根指针的栈
p=exp; ch=*p;
while(!(GetTop(S)==#&& ch==#))
{
if (!IN(chOP)) CrtNode( t ch ); // 建叶子结点
else {
switch (ch) {
case(: Push(S ch); break;
case): {
Pop(Sc);
while (c!=()
{ CrtSubtree(tc); Pop(Sc);} // 建子树直至运算符的栈顶为(
break;
}
defult:{
while (!GetTop(Sc) && (precede(cch)))
{ CrtSubtree(tc); Pop(Sc);}
// 建子树直至运算符栈顶运算符的优先数低
if ( ch !=#) Push( Sch);
break;
} // defult
} // switch
} // else
if (ch !=#) { p++; ch = *p; }
} // while
Pop(S c); Pop( PTRS t );
DestroyStack(S); DestroyStack(PTRS);
return t;
} // CrtExptree
算法的执行过程如动画所示