⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitree.c

📁 这是我的一些数据结构(C语言)源代码 比如LinkList
💻 C
字号:
#include <stdio.h>

/*------------- 二叉树的二叉链表存储表示 -------------*/
typedef enum {OVERFLOW = -1, ERROR = 0, FALSE = 0, TRUE, OK} Status;
typedef int TElemType;
typedef struct BiTNode {
    TElemType   data;
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

/*-------------------- 栈的存储表示 --------------------*/ 
#define STACK_INIT_SIZE 10
#define STACKINCREMENT  5
//typedef enum {TURE, FAKSE} boolean
typedef BiTree SElemType;
typedef struct {
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
/*----------------栈的基本操作的实现 ------------------*/
void InitStack( SqStack *S ) {
    S->base = (SElemType *) 
                malloc(STACK_INIT_SIZE * sizeof(SElemType));
    S->top = S->base;
    S->stacksize = STACK_INIT_SIZE;
}

void Push(SqStack *S, SElemType e) {
    if(S->top - S->base >= S->stacksize) {
        S->base = (SElemType *) realloc(S->base,
                (S->stacksize + STACKINCREMENT) * sizeof(SElemType)); 
        S->top = S->base + S->stacksize;  
        S->stacksize += STACKINCREMENT;
    }
    *S->top++ = e;
}

void Pop(SqStack *S, SElemType *e) {
    //if(S->top == S->base) eixt(-1);
    *e = *--S->top;
}

int StackEmpty(SqStack *S) {
    if(S->top == S->base) return 1;
    return 0;
}

void GetTop(SqStack *S, SElemType *e) {
    *e = *--S->top;
}    


/*---------------- 二叉树的基本操作的实现 -----------------*/
Status CreateBiTree(BiTree *Tr){
    BiTree T;
    TElemType   ch;
    
    printf("Enter element:\n");
    scanf("%d", &ch);
    if(ch == 0) T = NULL;
    else{
        T = (BiTNode *)malloc(sizeof(BiTNode));
        if(!T) exit(OVERFLOW);
        T->data = ch;
        CreateBiTree( &(T->lchild) );
        CreateBiTree( &(T->rchild) );
    }
    return OK;
}

Status PreOrderTraverse(BiTree T, Status (* Visit)(TElemType e) ){
    //
    //
}
/*
Status InOrderTraverse(BiTree T, Status (* Visit) (TElemType e) ){
    SqStack S; SElemType p;
    
    InitStack(&S); Push(&S, T);
    while(!StackEmpty(&S) ){
        while(GetTop(&S, &p) && p) Push(&S, p->lchild);
        Pop(&S, &p);
        if(!StackEmpty(&S) ){
            Pop(&S, &p); if(!Visit(p->data) ) return ERROR;
            Push(&S, p->rchild);
        }
    }
    return OK;
}
          
Status InOrderTraverse(BiTree T, Status (* Visit) (TElemType e) ){
    //
    //
    SqStack S; InitStack(&S);
    BiTree p = T;
    
    while(p || !StackEmpty(&S) ){
        if(p) { Push(&S, p); p = p->lchild; }
        else{
            Pop(&S, &p); if(!Visit(p->data) ) return ERROR;
            p = p->rchild;
        }
    }
    return OK;
}

Status PostOrderTraverse(BiTree T, Status (* Visit)(TElemType e) ){
    //
    //
}

Status LevelOrderTraverse(BiTree T, Status (* Visit)(TElemType e) ){
    //
    //
} 
*/
/*--------------------- main()函数 ---------------------*/
Status PrintElement(TElemType e){
    printf("%3d", e);
    return OK;
}
    
int main()
{
    BiTree tree;
   
    CreateBiTree(&tree);
    //printf("%d, %d, %d\n", tree->data, tree->lchild->data, tree->rchild->data);
    
    //InOrderTraverse(tree, PrintElement);
    system("pause");
    return 0;
}    
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -