第十周项目1 二叉树算法库

来源:互联网 发布:大众软件吧 编辑:程序博客网 时间:2024/05/01 06:24
main.cpp:#include <stdio.h>#include "btree.h"int main(){    BTNode *b,*p,*lp,*rp;;    printf("  (1)创建二叉树:");    CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");    printf("\n");    printf("  (2)输出二叉树:");    DispBTNode(b);    printf("\n");    printf("  (3)查找H节点:");    p=FindNode(b,'H');    if (p!=NULL)    {        lp=LchildNode(p);        if (lp!=NULL)            printf("左孩子为%c ",lp->data);        else            printf("无左孩子 ");        rp=RchildNode(p);        if (rp!=NULL)            printf("右孩子为%c",rp->data);        else            printf("无右孩子 ");    }    else        printf(" 未找到!");    printf("\n");    printf("  (4)二叉树b的深度:%d\n",BTNodeDepth(b));    printf("  (5)释放二叉树b\n");    DestroyBTNode(b);    return 0;}

btree,cpp:

#include <stdio.h>#include <malloc.h>#include "btree.h"void CreateBTNode(BTNode *&b,char *str)     {    BTNode *St[MaxSize],*p;    int top=-1,k,j=0;    char ch;    b=NULL;    ch=str[j];    while(ch!='\0')    {        switch(ch)        {        case '(':top++;St[top]=p;k=1;break;        case ')':top--;break;        case ',':k=2;break;        default:p=(BTNode *)malloc(sizeof(BTNode));                p->data=ch;p->lchild=p->rchild=NULL;                if(b==NULL)                    b=p;                else                    {                        switch(k)                        {                            case 1:St[top]->lchild=p;break;                            case 2:St[top]->rchild=p;break;                        }                    }        }        j++;        ch=str[j];    }}BTNode *FindNode(BTNode *b,ElemType x)  {    BTNode *p;    if(b==NULL)        return NULL;    else if(b->data==x)        return b;    else    {        p=FindNode(b->lchild,x);        if(p!=NULL)            return p;        else            return FindNode(b->rchild,x);    }}BTNode *LchildNode(BTNode *p)  {    return p->lchild;}BTNode *RchildNode(BTNode *p)   {    return p->rchild;}int BTNodeDepth(BTNode *b) {    int lchildh,rchildh;    if(b==NULL)return 0;    else    {        lchildh=BTNodeDepth(b->lchild);        rchildh=BTNodeDepth(b->rchild);        return (lchildh>rchildh)?(lchildh+1):(rchildh+1);    }}void DispBTNode(BTNode *b)  {   if(b!=NULL)   {       printf("%c",b->data);       if(b->lchild!=NULL||b->rchild!=NULL)       {           printf("(");           DispBTNode(b->lchild);           if(b->rchild!=NULL) printf(",");            DispBTNode(b->rchild);           printf(")");       }   }}void DestroyBTNode(BTNode *&b)   {    if(b!=NULL)    {        DestroyBTNode(b->lchild);        DestroyBTNode(b->rchild);        free(b);    }}
btree.h:

#ifndef BTREE_H_INCLUDED#define BTREE_H_INCLUDED#define MaxSize 100typedef char ElemType;typedef struct node{    ElemType data;                  struct node *lchild;            struct node *rchild;       } BTNode;void CreateBTNode(BTNode *&b,char *str);        BTNode *FindNode(BTNode *b,ElemType x);     BTNode *LchildNode(BTNode *p);  BTNode *RchildNode(BTNode *p);  int BTNodeDepth(BTNode *b);void DispBTNode(BTNode *b);void DestroyBTNode(BTNode *&b); #endif // BTREE_H_INCLUDED



1 0
原创粉丝点击