首 页科组简介下载中心文章中心客户留言论 坛博 客加入收藏
您当前的位置:惠州一中电教科组 -> 信息奥赛 -> 数据结构 -> 文章内容
 
栏目导航
热门文章
· [推荐] 生活中离不开..
· [组图] 学校网络IP地..
· [转载] 如何开展全国..
· [推荐] 搜索网站大全..
· [推荐] OIBH的NOIP模..
· 第十一届全国青少年..
· 第十一届全国青少年..
· [组图] 我校优秀学生..
· [推荐] 如何测试你的..
· 标准库函数的头文件..
相关文章
二叉树实现源代码
作者:本站  来源:本站整理  发布时间:2006-11-8 16:57:04  发布人:yzriyang

减小字体 增大字体

二叉树实现源代码如下:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
typedef int status;

typedef struct BiNode
{
    char Data;
    struct BiNode* lChild;
    struct BiNode* rChild;
}BiNode,*pBiNode;

status CreateTree(BiNode** pTree);
status PreOrderTraval(BiNode* pTree);
status Visit(char Data);
status Display(BiNode* pTree,int Level);
status Clear(BiNode* pTree);

BiNode *pRoot=NULL;

main()
{
    clrscr();
    CreateTree(&pRoot);

    printf("\nPreOrder:");
    PreOrderTraval(pRoot);
    printf("\n");

    printf("\nInOrder:");
    InOrderTraval(pRoot);
    printf("\n");

    printf("\nPostOrder:");
    PostOrderTraval(pRoot);
    printf("\n");

    printf("\nShowLeaves:");
    ShowLeaves(pRoot);
    printf("\n-----------------------\n");
    printf("\n");

    Display(pRoot,0);

    printf("\n");
    printf("\nDeleting Tree:\n");
    DelTree(pRoot);
    printf("BiTree Deleted.");

    getch();
}
status CreateTree(BiNode** pTree) /*Input Example: abd##e##cf##g##*/
{
    char ch;
    scanf("%c",&ch);
    if(ch==‘#‘)
    {
        (*pTree)=NULL;
    }
    else
    {
        if(!((*pTree)=(BiNode*)malloc(sizeof(BiNode))))
        {
            exit(OVERFLOW);
        }
        (*pTree)->Data=ch;
        CreateTree(&((*pTree)->lChild));
        CreateTree(&((*pTree)->rChild));
    }
return OK;
}
status PreOrderTraval(BiNode* pTree)
{
    if(pTree)
    {
        if(Visit(pTree->Data))
        {
            if(PreOrderTraval(pTree->lChild))
            {
                if(PreOrderTraval(pTree->rChild))
                {
                    return OK;
                }
            }
        }
        return ERROR;
    }
    else
    {
        return OK;
    }
}
status InOrderTraval(BiNode* pTree)
{
    if(pTree)
    {
        if(InOrderTraval(pTree->lChild))
        {
            if(Visit(pTree->Data))
            {
                if(InOrderTraval(pTree->rChild))
                {
                    return OK;
                }
            }
            return ERROR;
        }
        return ERROR;
    }
    else
    {
        return OK;
    }
}
status PostOrderTraval(BiNode* pTree)
{
    if(pTree)
    {
        if(PostOrderTraval(pTree->lChild))
        {
            if(PostOrderTraval(pTree->rChild))
            {
                if(Visit(pTree->Data))
                {
                    return OK;
                }
                return ERROR;
            }
        }
        return ERROR;
    }
    else
    {
        return OK;
    }
}
status Visit(char Data)
{
    printf("%c",Data);
    return OK;
}
status Display(BiNode* pTree,int Level)
{
    int i;
    if(pTree==NULL) return;
    Display(pTree->lChild,Level+1);
    for(i=0;i<Level-1;i++)
    {
        printf(" ");
    }
    if(Level>=1)
    {
        printf("--");
    }
    printf("%c\n",pTree->Data);
    Display(pTree->rChild,Level+1);
}
status ShowLeaves(BiNode* pTree)
{
    if(pTree)
    {
        if(ShowLeaves(pTree->lChild))
        {
            if(ShowLeaves(pTree->rChild))
            {
                if((pTree->lChild==NULL)&&(pTree->rChild==NULL))
                {
                    if(!Visit(pTree->Data))
                    {
                        return ERROR;
                    }
                } 
                return OK;
            }
        }
        return ERROR;
    }
    else
    {
        return OK;
    }
}
status DelTree(BiNode* pTree)
{
    if(pTree)
    {
        if(DelTree(pTree->lChild))
        {
            if(DelTree(pTree->rChild))
            {
                printf("Deleting %c\n",pTree->Data);
                free((void*)pTree);
                return OK;
            }
        }
        return ERROR;
    }
    else
    {
        return OK;
    }
}
] [返回上一页] [打 印] [收 藏]
上一篇文章:霍夫曼树编码的实现
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]

 
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 管理登录
Copyright © 2002-2006 dj.hzyz.net. All Rights Reserved .2006