• 中科院2000 三


    由二叉树的前序遍历和中序遍历序列能确定唯一的一棵二叉树,下面程序的作用是实现由已知某二叉树的前序遍历和中序遍历序列,生成一棵用二叉链表表示的二叉树并打印出后序遍历序列,请写出程序所
    缺的语句。
    #define MAX 100
    
    typedef struct Node{
        char info;
        struct Node *llink, *rlink;
    }TNODE;
    
    char pred[MAX],inod[MAX];//前序遍历序列数组,和中序遍历数组
    
    main(int argc,int **argv){//argc是个啥我也不知道,argv是个二维数组。
        TNODE *root;//建立根结点
        if(argc<3) exit 0;
        strcpy(pred,argv[1]);//复制给pred
        strcpy(inod,argv[2]);//复制给inod
        root=restore(pred,inod,strlen(pred));//建树
        postorder(root);//后序遍历
    }
    
    TNODE *restore(char *ppos,char *ipos,int n){//oppos 是先序遍历数组,ipos是中序遍历数组
        TNODE *ptrl;//新建一棵树
        char *rpos;
        int k;
        if(n<=0) return NULL;//n是还有多少没有结点没有进到树内
        ptr->info = *ppos;//根节点的值为先序的第一个。这里不能写ppos[0],因为这个是个递归,
        for(rpos = ipos; rpos<ipos+n;rpos++)
            if(*rpos==*ppos) break;//从中序中找到前序的第一个。
        k = rpos - ipos;//地址直接减,就是他的位子。
        ptr->llink = restore(ppos+1, ipos,k );//ppos的第一个是跟。ppos+1开始的k个和ipos开始的k个构成做左子树
        ptr->rlink = restore(ppos+1+k,rpos+1,n-1-k);//ppos+1开始的k个画也就是ppos+1+K,rpos+1(也可以ipos+k+1)就是k和左子树和一个根,后面的是右子树。个数是n-1-k;
        return ptr;
    }
    postorder(TNODE*ptr){
        if(ptr=NULL) return;
        postorder(ptr->llink);
        postorder(ptr->rlink);
        printf(“%c”,ptr->info);
        
    }
  • 相关阅读:
    (转)Linux系统中sysctl命令详解 sysctl -p、sysctl -a、sysctl -w
    EM2 MP1 Vowel and Consonant Teacher:Ashley
    Phonics 自然拼读法 y,x,ch,sh,(voiced)th/ð/ ,(unvoiced) th/θ/ Teacher:Lamb
    java列表转成 int[] 的格式
    分类模型评估之ROC-AUC曲线和PRC曲线
    hive 抽样方法
    AUC理解
    Spark性能调优——基础篇
    scala 稀疏向量
    scala 建模
  • 原文地址:https://www.cnblogs.com/2014slx/p/11335739.html
Copyright © 2020-2023  润新知