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;
    }
     
  • 相关阅读:
    将字符数组写到字符串
    两种比较不错的密码修改方案
    数组的应用 结构类型 使用深复制和浅复制 显示员工信息
    字符串处理技巧
    uva 1339
    11039
    uva 11636
    Uva401Palindromes
    poj2524-Ubiquitous Religions
    Poj1611The Suspects
  • 原文地址:https://www.cnblogs.com/wzqstudy/p/10081585.html
Copyright © 2011-2022 走看看