二叉树创建、遍历、深度、销毁

来源:互联网 发布:java httpclient ssl 编辑:程序博客网 时间:2024/06/05 16:43
#include "stdio.h"int g_index=0;int g_dataCount=0;typedef char DataType;typedef struct BiTNode{    DataType data;    struct BinTNode *LChild,*RChild;}BiTNode,*BiTree;//创建二叉树void createBiTree(BiTree *t,DataType *treeData){    if(g_index==g_dataCount) return;    DataType tmpData=treeData[g_index++];    if(tmpData=='#')        *t=NULL;    else    {        *t=(BiTree)malloc(sizeof(BiTNode));        (*t)->data=tmpData;        createBiTree(&((*t)->LChild),treeData);        createBiTree(&((*t)->RChild),treeData);    }}//前序遍历void preOrder(BiTree t){    if(t==NULL)return;    else    {        printf("%c ",t->data);        preOrder(t->LChild);        preOrder(t->RChild);    }}//中序遍历void inOrder(BiTree t){    if(t==NULL)return;    else    {        inOrder(t->LChild);        printf("%c ",t->data);        inOrder(t->RChild);    }}//后序遍历void postOrder(BiTree t){    if(t==NULL)return;    else    {        postOrder(t->LChild);        postOrder(t->RChild);        printf("%c ",t->data);    }}//计算树的深度int BiTreeDepth(BiTree t){    int i,j;    if(t==NULL)return 0;    if(t->LChild!=NULL)        i=BiTreeDepth(t->LChild);    else        i=0;    if(t->RChild!=NULL)        j=BiTreeDepth(t->RChild);    else        j=0;    return i>j?i+1:j+1;}//destroyvoid destroyBiTree(BiTree *t){    if(*t)    {        if((*t)->LChild!=NULL)            destroyBiTree(&((*t)->LChild));        if((*t)->RChild!=NULL)            destroyBiTree(&((*t)->RChild));        free(*t);        *t=NULL;    }}int main(){    DataType *treeData="ABDH#K###E##CFI###G#J##";    g_dataCount=strlen(treeData);    BiTree t=NULL;    createBiTree(&t,treeData);    //遍历方式#if 1    printf("preOrder\n");    preOrder(t);    printf("\n");    printf("inOrder\n");    inOrder(t);    printf("\n");    printf("postOrder\n");    postOrder(t);    printf("\n");#endif    printf("depth:%d\n",BiTreeDepth(t));    destroyBiTree(&t);    printf("depth:%d\n",BiTreeDepth(t));    return 0;}

阅读全文
0 0
原创粉丝点击