二叉树及其应用--树

来源:互联网 发布:旺旺怎么开通淘宝店铺 编辑:程序博客网 时间:2024/05/16 10:48

给定树的孩子兄弟表示的数据类型如下

typedef char ElemType;struct CSNode;typedef struct CSNode * CSTree;typedef struct CSNode CSTNode;struct CSNode{    ElemType data;    struct CSNode *child; //第一个孩子    struct CSNode *sibling; //下一个兄弟

树的创建I
完成CSTree CreateTree(char s[])函数,该函数由字符串s创建一颗树,其中字符串s是仅由‘(’、‘)’、‘,’以及大小写字符构成的树的广义表表示,如A(B(D,E,F),C(G)),字符串s以’\0’结尾。创建树时,下一兄弟链安装结点出现的顺序链接,如A(B(D,E,F),C(G))创建的树如下所示

CSTree NewNode(ElemType x){    CSTree p=(CSTree)malloc(sizeof(CSNode));    p‐>data=x;    p‐>child=NULL;    p‐>sibling=NULL;    return p;}CSTree CreateTree(char s[]){    int i,k,top;    CSTree path[N],p,t;    k=0;    top=‐1;    for(i=0;s[i]!='\0';i++)    {        switch(s[i])        {         case '(':            path[++top]=p;            k=1;            break;        case ',':            k=2;            break;        case ')':            top‐‐;            break;        }         if(isalpha(s[i]))        {            p=NewNode(s[i]);            if(k==1)                path[top]‐>child=p;            else if(k==2)            {                t=path[top]‐>child;                while(t‐>sibling!=NULL)                    t=t‐>sibling;                t‐>sibling=p;            }        }    }     return path[0];}//2333

树的创建II
完成CSTree CreateTree(char s[])函数,该函数从标准输入创建一颗树。
创建树时,下一兄弟链安装结点出现的顺序链接,如输入样例创建的树如下所示

输入样列:

输入有多多行,表示树的广度优先遍历。输入样例表示如下所示的一颗树

A
BC#
DEF#
G#
#
#
#
#

CSTree NewNode(ElemType x){    CSTree p=(CSTree)malloc(sizeof(CSNode));    p‐>data=x;    p‐>child=NULL;    p‐>sibling=NULL;    return p;}CSTree CreateTree(){    char a,s[N];    scanf("%c",&a);    getchar();    CSTree root=NewNode(a);    CSTree u,p,t;    queue<CSTree>q;    q.push(root);    while(!q.empty())    {        u=q.front();        q.pop();        fgets(s,N,stdin);        if(s[0]=='#')            continue;        p=NewNode(s[0]);        u‐>child=p;        q.push(p);        for(int i=1;s[i]!='#';i++)        {            p=NewNode(s[i]);            q.push(p);            t=u‐>child;            while(t‐>sibling!=NULL)                t=t‐>sibling;            t‐>sibling=p;        }    }    return root;}

完成void Pre_Order(CSTree root)函数,该函按前序遍历的方式遍历树上的结点(下一兄弟中按顺序),如下图所示,前序遍历为ABDEFCG

void Pre_Order(CSTree root){    if(root!=NULL)    {        printf("%c",root‐>data);        if(root‐>child!=NULL)            Pre_Order(root‐>child);        if(root‐>sibling!=NULL)            Pre_Order(root‐>sibling);    }}//2335

完成void Post_Order(CSTree root)函数,该函按前后遍历的方式遍历树上的结点(下一兄弟中按顺序),如下图所示,后序遍历为DEFBGCA

void Post_Order(CSTree root){    if(root!=NULL)    {        if(root‐>child!=NULL)            Post_Order(root‐>child);        printf("%c",root‐>data);        if(root‐>sibling!=NULL)            Post_Order(root‐>sibling);    }}//2336
0 0
原创粉丝点击