输出以二叉树表示的算术表达式(严6.51)

Description

编写程序,输出以二叉树表示的算术表达式,若该表达式中含有括号,则在输出时应添上。

Input

按先序输入一行字符,其中#表示取消建立子树结点,即所有叶子节点均为#。

Output

输出该二叉树所表示的算术表达式(若表达式中含有括号,则在输出时应添上)。

  • Sample Input 
    *+a(###b#)##c##
  • Sample Output
    (a+b)*c
    #include 
    #include 
    #include 
    
    typedef struct tnode
    {
        char data;
        struct tnode *lchild,*rchild;
    }tnode;
    
    tnode *Create(tnode *t)//先序创建树
    {
        char c;
        c=getchar();
        if(c=='#') t->data=c;
        else{
            t->data=c;
            t->lchild=(tnode*)malloc(sizeof(tnode)),t->lchild=Create(t->lchild);
            t->rchild=(tnode*)malloc(sizeof(tnode)),t->rchild=Create(t->rchild);
        }
        return t;
    }
    
    void out(tnode *t)//中序输出
    {
        //int l;
        if(t->lchild->data=='#') {//无左子树可输出自身数据
            if(t->rchild->data=='#') printf("%c",t->data);
            else printf("%c",t->data),out(t->rchild);
        }
        else{
            out(t->lchild);
            printf("%c",t->data);
            if(t->rchild->data!='#')out(t->rchild);
        }
    }
    
    int main()
    {
        tnode *t;
        t=(tnode*)malloc(sizeof(tnode));
        t=Create(t);
        out(t);
        return 0;
    }
    

你可能感兴趣的:(数据结构—树)