📄 bitree.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 + -