zoukankan      html  css  js  c++  java
  • 中科院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);
        
    }
  • 相关阅读:
    常用资源
    printf打印颜色
    Vue开发中踩坑-Day3
    Vue开发踩坑-Day2
    Vue开发中的踩坑-day1
    Python中virtualenv的使用
    第十一章:Python高级编程-协程和异步IO
    第十章:Python高级编程-多线程、多进程和线程池编程
    第九章:Python高级编程-Python socket编程
    自定义Element父子不关联的穿梭树
  • 原文地址:https://www.cnblogs.com/2014slx/p/11335739.html
Copyright © 2011-2022 走看看