zoukankan      html  css  js  c++  java
  • 根据先序遍历和中序遍历创建二叉树(代码)

    先声明一个结构体:二叉树的三个元素,数据域,左子树,右子树。

    typedef char ElemType;
    typedef struct Node 
    {
        ElemType data;
        struct Node *lchild,*rchild;
    }BitTree;
    声明函数:返回值:二叉树
         pre:先序遍历字符串
         in:中序遍历字符串
         number:字符串长度
    BitTree *createBinTreeByPreIn(char *pre,char *in,int number);
     
    二叉树问题我喜欢使用递归方法解决,实现起来比较简单,但是效率可能有点低。
    使用递归时最重要的一个就是结束条件,下面是具体实现。
    结束条件:当字符串长度为0。
    BitTree *createBinTreeByPreIn(char *pre,char *in,int number)
    {
        if(number==0)  return NULL;
        char c = pre[0];
        int i = 0;
        while(i<number && in[i]!=c)i++;
        int leftNumber = i;
        int rightNumber = number - i - 1;
        BitTree *node = (BitTree *)malloc(sizeof(BitTree));
        node->data = c;
        node->lchild = createBinTreeByPreIn(&pre[1],&in[0],leftNumber);
        node->rchild = createBinTreeByPreIn(&pre[leftNumber+1],&in[leftNumber+1],rightNumber);
        return node;
    }

    最后主函数测试一下:

    int main(int argc,char **argv)
    {
        char a[SIZE],b[SIZE];
        BitTree *p;
        while(scanf("%s%s",a,b)!=EOF)
        {
            p = createBinTreeByPreIn(a,b,strlen(a));
            printf("
    ");
        }
        return 0;
    }
     
  • 相关阅读:
    [COCI20142015#1] Kamp
    [CEOI2007]树的匹配Treasury
    [JLOI2016/SHOI2016]侦察守卫
    [POI2015]MOD
    [BJOI2017]机动训练
    [九省联考2018]一双木棋chess
    [清华集训2012]串珠子
    [POI2014]ZALFreight
    [SHOI2009]舞会
    [COCI2019]Mobitel
  • 原文地址:https://www.cnblogs.com/wzqstudy/p/10081585.html
Copyright © 2011-2022 走看看