Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121908
  • 博文数量: 41
  • 博客积分: 1695
  • 博客等级: 上尉
  • 技术积分: 430
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-21 22:50
文章分类

全部博文(41)

文章存档

2010年(1)

2007年(23)

2006年(17)

我的朋友

分类: C/C++

2006-12-20 22:01:05

#include
#include

struct BiTNode
{
    char data;
    struct BiTNode *lchild, *rchild;
};
typedef struct BiTNode BiTNode;
typedef struct BiTNode *BiTree;

void PreOrderTraverse(BiTree T)
{
    if(T)
    {
        printf("%c ",T->data);
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
    }
}
void PostOrderTraverse(BiTree T)
{
    if(T)
    {
        PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        printf("%c ",T->data);
    }
}
void IntOrderTraverse(BiTree T)
{
    if(T)
    {
        PostOrderTraverse(T->lchild);
        printf("%c ",T->data);
        PostOrderTraverse(T->rchild);
        
    }
}

void CountLeaf(BiTree T, int *leaf)
{
    if(!T)
        return;
    else
    {
        if(!T->lchild && !T->rchild)
            (*leaf)++;
        CountLeaf(T->lchild, leaf);
        CountLeaf(T->rchild, leaf);
    }
}

void CountDepth(BiTree T, int *depth)
{
    int d1,d2;
    if(!T)
    {
        *depth = 0;
        return;
    }
    else
    {
        CountDepth(T->lchild, &d1);
        CountDepth(T->rchild, &d2);
        *depth = d1>d2?++d1:++d2;   
    }
}
void LocateData(BiTree T, char ch)
{
    if(!T)
        return;
    else
    {
        if(T->data == ch)
        {
            printf("success!\n");
            flag = 1;
        }
        LocateData(T->lchild, ch);
        LocateData(T->rchild, ch);
    }
}

void CreatBiTree(BiTree *T)
{
    char t;
//    printf("input a letter:");
    scanf("%c",&t);
    if(t == ' ')
    {
        *T= NULL;
        return;
    }
    else
    {
        *T = (BiTNode *)malloc(sizeof(BiTNode));
        (*T)->data = t;
        (*T)->lchild = NULL;
        (*T)->rchild = NULL;
        CreatBiTree(&(*T)->lchild);
        CreatBiTree(&(*T)->rchild);   
    }
}

int main()
{
    BiTree T;
    int leaf=0, depth;
    CreatBiTree(&T);
    PreOrderTraverse(T);
    printf("\n");
    PostOrderTraverse(T);
    printf("\n");
    IntOrderTraverse(T);
    CountLeaf(T, &leaf);
    CountDepth(T, &depth);
    LocateData(T, 'e');
    printf("\nleafnum=%d,depth= %d\n",leaf,depth);
    return 0;
}
 
阅读(1776) | 评论(7) | 转发(0) |
给主人留下些什么吧!~~