| 站点地图 | 联系我
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 上善若水 厚德载物
 现在位置 :: 主页 >> 资料中心 >> ROOT / CODE / ARITHMETIC /
 

二叉树实现源代码

来源(编程开发 - 新云网络)

From: http://www.newasp.net/tech/program/20578.html

二叉树实现源代码

作者:佚名 来源:本站整理 发布时间:2006-3-27 17:18:27

二叉树实现源代码如下:

#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("PreOrder:");
    PreOrderTraval(pRoot);
    printf("");

    printf("InOrder:");
    InOrderTraval(pRoot);
    printf("");

    printf("PostOrder:");
    PostOrderTraval(pRoot);
    printf("");

    printf("ShowLeaves:");
    ShowLeaves(pRoot);
    printf("-----------------------");
    printf("");

    Display(pRoot,0);

    printf("");
    printf("Deleting Tree:");
    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",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",pTree->Data);
                free((void*)pTree);
                return OK;
            }
        }
        return ERROR;
    } else {
        return OK;
    }
}


[本日:1 本周:1 本月:17 总数:1891 ]

Link: http://www.asm32.net/article_details.aspx?id=4327


浏览次数 108 发布时间 2008/11/23 5:24:39 从属分类 ARITHMETIC 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 京ICP备09029108号-1