1.由先追表示式建树
例如:已知表达式的先缀表示式:-*+abc/de。
表达式 = (第一操作数)(运算符)(第二操作数)。把运算符当做根节点,第一、二操作数分别作为左右子树。
(1)先缀表述法:运算符、第一操、第二操。如-*+abc/de。
序列中,如果为操作数则一定是根节点,左右指针不为空;如果为字符,一定是叶子节点,左右指针为空。
后缀表述法:数1、数2、操作符。
void CrtExptree(BiTree &T,char exp[])
{
InitStack(S);//初始化运算符栈
Push(S,'#');//压入第一个字符
InitStack(PTR);//初始化字符栈
p=exp;
ch=*p;
while(!(GetTop(S)=='#'&&ch=='#'))
{
if(!IN(ch,OP))//如果扫描到的不是运算符而是字符,就建立子节点并入栈
CrtNode(t,ch);
else
{
switch (ch)
{
case '(':Push(S,ch);break;
case ')':
defult:
}//switch
}//else
if(ch!='#')
{
p++;
ch=*p;
}
}
Pop(PTR,T);
}