C语言实现树结构
来源:互联网 发布:linux源代码分析博客 编辑:程序博客网 时间:2024/04/29 09:02
#define ERROR -2
#define OK 1
#define true 1
#define false 0
#define NULL 0
#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
#define Status int
#define TElemtype char
#define StackElem BiTNode
#define MAX_TREE_SIZE 100
#include <stdio.h>
typedef struct BiTNode{
TElemtype data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct{
StackElem *base;
StackElem *top;
int stacksize;
}SqStack;
int InitStack(SqStack *S)
{
(*S).base=(StackElem *)malloc(STACK_INT_SIZE*sizeof(StackElem));
if(!(*S).base) return ERROR;
(*S).top=(*S).base;
(*S).stacksize=STACK_INT_SIZE;
return OK;
}
int GetTop(SqStack S,StackElem *e)
{if(S.base==S.top) return ERROR;
*e=*(S.top-1);/*different from book!*/
return OK;
}
int Push(SqStack *S,StackElem e)
{
if((*S).top-(*S).base>=(*S).stacksize){
(*S).base=(StackElem *)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(StackElem));
if((*S).base) exit(OVERFLOW);
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)=e;
(*S).top++;
return OK;
}
int Pop(SqStack *S,StackElem *e)
{if((*S).top==(*S).base)
return ERROR;
--(*S).top;
*e=*((*S).top);
return OK;
}
int StackEmpty(SqStack S)
{if(S.top==S.base)
return true;
else
return false;
}
Status Visit(TElemtype e){ /*the easist VISIT function*/
printf("%c->",e);
return OK;
}/*Visit*/
BiTNode *q;
Status InOrderTraverse(BiTree T)
{SqStack *S;
S=(SqStack *)malloc(sizeof(SqStack));
q=(BiTNode *)malloc(sizeof(BiTNode));
InitStack(S);
q=T;
while(q||!StackEmpty(*S))
{ if(q){Push(S,*q);
q=q->lchild;}
else{
Pop(S,q);
if(!Visit(q->data)) return ERROR;
q=q->rchild;
}/*else*/
}/*while()*/
return OK;
}/*InOrder VisitTree*/
Status PreOrderTraverse(BiTree T) /* ,Status (*Visit)(TElemType e)) */
{
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->lchild))
if(PreOrderTraverse(T->rchild)) return OK;
return ERROR;
}/*if(T)*/
else return OK;
}/*PreOder VisteTree*/
Status PostOrderTraverse(BiTree T)
{
if(T){
if(PostOrderTraverse(T->lchild))
if(PostOrderTraverse(T->rchild))
if(Visit(T->data)) return OK;
return ERROR;
}/*if(T)*/
else return OK;
}/*PostOder VisteTree*/
Status CreateBiTree(BiTree *T)
{char *ch;
ch=(char *)malloc(sizeof(char));
scanf("%c",ch);
if(*ch==' ') *T=NULL;
else{
if(!((*T)=(BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW);
(*T)->data=*ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}/*else*/
return OK;
}/*CreaTtree*/
main()
{BiTree *myTree;
myTree=(BiTree *)malloc(sizeof(BiTree));
clrscr();
printf("Please input chars:/n");
CreateBiTree(myTree);
printf("InOrderTraverse:/n");
InOrderTraverse(*myTree);
printf("/n");
printf("PreOrderTraverse:/n");
PreOrderTraverse(*myTree);
printf("/n");
printf("PostOrderTraverse:/n");
PostOrderTraverse(*myTree);
printf("/n");
printf("Check any button quit the programe!");
getch();
}
- C语言实现树结构
- C语言栈结构实现
- 数据结构C语言实现之二叉树链式结构
- 二叉树的顺序结构C语言实现
- 树(C语言实现,基于链式结构)
- C语言中用结构实现位段
- 单链表数据存储结构(c语言实现)
- C语言实现通用数据类型栈结构
- C语言实现不定结构体
- C语言实现结构体继承
- C语言实现的链表结构
- 队列的链式结构C语言实现
- [c语言]结构体实现通讯录
- 栈-顺序存储结构(C语言实现)
- C语言实现动态链表结构
- 利用c语言结构体实现通讯录
- 数据结构—非二叉树存储结构(C语言实现)
- 用C语言实现二叉树的结构和常用操作
- 从这里开始,到达理想的巅峰
- 数字签名算法SHA-1的FPGA高速实现
- linux上路
- 加密解密、信息摘要
- C语言实现堆栈
- C语言实现树结构
- 7步实现GridView控件ajax化
- 他们说java web 没前途
- asp.net 2.0的gridview基本知识
- java面试常见32问
- asp.net 2.0中用GRIDVIEW插入新记录
- asp.net中的联动菜单
- ASP.NET 打开新窗口几种方法
- Excel技术资源网站演义