| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 531 人关注过本帖
标题:还是二叉树。。搞不定呀
取消只看楼主 加入收藏
Nekomimi
Rank: 2
等 级:论坛游民
帖 子:80
专家分:15
注 册:2006-11-21
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:0 
还是二叉树。。搞不定呀
#include <stdio.h>
#define MAX 100
typedef struct BiTNode{
    int data;
    struct BitNode *lchild,*rchild;
}BiTNode,*BiTree;
int creatT(BiTree *T,char c){
    if(c==' '){
        *T=NULL;
    }else{
        if(!((*T)=(BiTNode *)malloc(sizeof(BiTNode)))){
            printf("ERROR");
            return 0;
        }
        (*T)->data=c;
        (*T)->lchild=NULL;
        (*T)->rchild=NULL;
    }
    return 1;
}
void creatTT(BiTree *M,BiTree *N,BiTree *T){
    (*T)->lchild=*M;
    (*T)->rchild=*N;
}
void printfT(BiTree *T){
    if(*T==NULL){
        printf(" ");
    }else{
        printf("%c",(*T)->data);
        printfT(&((*T)->lchild));
        printfT(&((*T)->rchild));
    }
}
int nu(int c){
    if(c=='('||c==')'||c=='+'||c=='-'||c=='*'||c=='/'||c=='#'){
        return 1;
    }else{
        return 0;
    }
}
int than(int m,int c){
    if(m=='+'||m=='-'){
        if(c=='+'||c=='-'||c=='#'||c==')'){
            return 1;
        }else if(m=='*'||m=='/'||c=='('){
            return -1;
        }
    }else if(m=='*'||m=='/'){
        if(c=='+'||c=='-'||c=='*'||c=='/'||c==')'||c=='#'){
            return 1;
        }else if(c=='('){
            return -1;
        }
    }else if(m=='('){
        if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('){
            return -1;
        }else if(c==')'){
            return 0;
        }
    }else if(m==')'){
        if(c=='+'||c=='-'||c=='*'||c=='/'||c==')'||c=='#'){
            return 1;
        }
    }else{
        if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c=='#'){
            return -1;
        }else if(c=='#'){
            return 0;
        }
    }
}

int main(int argc, char *argv[])
{
    BiTree *T,*M,*b[MAX],*x,*y;
    int a[MAX],c,i=0,j=0,k,t,r;
    a[0]='#';
    c=getchar();
    while(a[1]!='#'&&c!=EOF){
        if(nu(c)==0){      \\如果是数字
            c-='0';
            creatT(&M,c);
            b[j++]=M;
            c=getchar();
        }else{                    
            k=than(a[i],c);       \\比较运算符优先级
            switch(k){
                case -1:
                    a[++i]=c;
                    c=getchar();
                    break;
                case 0:
                    i--;
                    c=getchar();
                    break;
                case 1:
                    x=b[--j];
                    y=b[--j];
                    t=a[i--];
                    creatT(&T,t);
                    creatTT(y,x,&T);
                    b[j++]=T;
                    break;
                default:break;
            }
        }
    }
    printfT(&T);
    return 0;
}
建立一个计算式的二叉树,输入#结束,比如:2*3+5#。。然后打印出来:+*2  3  5  ,注意有空格。。
现在只能打印出+,而且弹出错误。。到底是哪儿错了呀。。


[ 本帖最后由 Nekomimi 于 2010-1-26 21:45 编辑 ]
搜索更多相关主题的帖子: 二叉树 
2010-01-26 21:42
快速回复:还是二叉树。。搞不定呀
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021063 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved