二叉树
来源:互联网 发布:chrome ubuntu 16.04 编辑:程序博客网 时间:2024/06/17 01:01
点击(此处)折叠或打开
- /*
- *二叉树采用二叉链表结构表示。设计并实现如下算法:
- *后序递归建树,先序非递归遍历该树。
- */
- #include <stdio.h>
- #include <stdlib.h>
- #define ERROR 0
- #define OK 1
- #define OVERFLOW 0
- #define STACK_INIT_SIZE 100
- #define STACKINCREMENT 100
- typedef char TElemType;
- typedef struct BiTNode {
- TElemType data;
- struct BiTNode *lchild, *rchild;
- }BiTNode, *BiTree;
- typedef BiTree ElemType;
- typedef struct {
- ElemType *base;
- ElemType *top;
- int stacksize;
- }SqStack;
- int InitStack (SqStack *S)
- {
- S->base=(ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
- if (!S->base)
- exit (OVERFLOW);
- S->top=S->base;
- S->stacksize=STACK_INIT_SIZE;
- return OK;
- }
- int StackEmpty (SqStack S)
- {
- if (S.base==S.top)
- return 1;
- else
- return 0;
- }
- int Push (SqStack *S, ElemType e)
- {
- if (S->top - S->base >= S->stacksize)
- {
- S->base=(ElemType *)realloc(S->base,
- (S->stacksize + STACKINCREMENT)* sizeof(ElemType));
- if (!S->base)
- exit (OVERFLOW);
- S->top=S->base+S->stacksize;
- S->stacksize+=STACKINCREMENT;
- }
- *S->top++ = e;
- return OK;
- }
- int Pop(SqStack *S,ElemType *e)
- {
- if (S->top==S->base)
- return ERROR;
- *e=*(--S->top);
- return OK;
- }
- void CreateBiTree (BiTree *T)
- {
- TElemType temp;
- scanf ("%c", &temp);
- if (temp==' ')
- {
- *T=NULL;
- }
- else
- {
- if (!((*T)=(BiTree)malloc(sizeof(BiTNode))))
- exit (1);
- CreateBiTree (&((*T)->lchild));
- CreateBiTree (&((*T)->rchild));
- (*T)->data=temp;
- }
- }
- void Traverse (BiTree T)
- {
- BiTree P;
- SqStack S;
- InitStack (&S);
- P=T;
- while (P||!StackEmpty(S))
- {
- if (P)
- {
- printf ("%c", P->data);
- Push(&S,P);
- P=P->lchild;
- }
- else
- {
- Pop(&S,&P);
- P=P->rchild;
- }
- }
- }
- int main ()
- {
- BiTree T;
- CreateBiTree (&T);
- printf ("\n");
- Traverse (T);
- printf ("\n");
- printf ("end");
- getch ();
- return 0;
- }
点击(此处)折叠或打开
- /* 二叉树采用二叉链表结构表示。设计并实现如下算法:
- * 输入某棵二叉树的广义表形式,建立该二叉树,并按层次遍历该二叉树
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- #define ERROR 0
- #define OK 1
- #define OVERFLOW 0
- #define STACK_INIT_SIZE 100
- #define STACKINCREMENT 100
- #define MAXQSIZE 100
- typedef char TElemType;
- typedef struct BiTNode {
- TElemType data;
- struct BiTNode *lchild, *rchild;
- }BiTNode, *BiTree;
- typedef BiTree ElemType;
- typedef struct {
- ElemType *base;
- ElemType *top;
- int stacksize;
- }SqStack;
- typedef struct {
- ElemType *base;
- int front;
- int rear;
- }SqQueue;
- void InitQueue (SqQueue *Q)
- {
- Q->base=(ElemType *)malloc(MAXQSIZE * sizeof(ElemType));
- if (!Q->base)
- exit (0);
- Q->front=0;
- Q->rear=0;
- }
- int QueueLength (SqQueue Q)
- {
- return (Q.rear-Q.front+MAXQSIZE) % MAXQSIZE;
- }
- void EnQueue (SqQueue *Q, ElemType e)
- {
- if ((Q->rear+1)%MAXQSIZE==Q->front)
- return;
- Q->base[Q->rear]=e;
- Q->rear=(Q->rear+1)%MAXQSIZE;
- }
- void DeQueue (SqQueue *Q, ElemType *e)
- {
- if (Q->front==Q->rear)
- return;
- *e=Q->base[Q->front];
- Q->front=(Q->front+1)%MAXQSIZE;
- }
- int InitStack (SqStack *S)
- {
- S->base=(ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
- if (!S->base)
- exit (OVERFLOW);
- S->top=S->base;
- S->stacksize=STACK_INIT_SIZE;
- return OK;
- }
- int StackEmpty (SqStack S)
- {
- if (S.base==S.top)
- return 1;
- else
- return 0;
- }
- int Push (SqStack *S, ElemType e)
- {
- if (S->top - S->base >= S->stacksize)
- {
- S->base=(ElemType *)realloc(S->base,
- (S->stacksize + STACKINCREMENT)* sizeof(ElemType));
- if (!S->base)
- exit (OVERFLOW);
- S->top=S->base+S->stacksize;
- S->stacksize+=STACKINCREMENT;
- }
- *S->top++ = e;
- return OK;
- }
- int Pop(SqStack *S,ElemType *e)
- {
- if (S->top==S->base)
- return ERROR;
- *e=*(--S->top);
- return OK;
- }
- void Create (BiTree *T)
- {
- char temp;
- BiTree P=NULL,Q=NULL;
- SqStack S;
- int status=0;
- *T=NULL;
- InitStack (&S);
- scanf ("%c",&temp);
- while (temp!='#')
- {
- switch (temp) {
- case '(' :
- status=1; //准备处理左子树
- if (P!=NULL)
- Push (&S,P);
- break;
- case ')' :
- Pop (&S,&P);
- break;
- case ',' :
- status=2;
- break;
- default :
- P=(BiTree)malloc(sizeof(BiTNode));
- P->data=temp;
- P->lchild=NULL;
- P->rchild=NULL;
- if (*T==NULL)
- *T=P;
- else
- {
- if (status==1)
- {
- Pop (&S,&Q);
- Q->lchild=P;
- Push (&S,Q);
- }
- else if (status==2)
- {
- Pop (&S,&Q);
- Q->rchild=P;
- Push (&S,Q);
- }
- }
- }
- scanf ("%c",&temp);
- }
- }
- void Traverse (BiTree T)
- {
- SqQueue Q;
- BiTree P;
- InitQueue (&Q);
- P=T;
- EnQueue (&Q, T);
- while (QueueLength (Q)!=0)
- {
- DeQueue (&Q, &P);
- printf ("%c", P->data);
- if (P->lchild!=NULL)
- EnQueue (&Q, P->lchild);
- if (P->rchild!=NULL)
- EnQueue (&Q, P->rchild);
- }
- }
- int main ()
- {
- BiTree T;
- Create (&T);
- Traverse (T);
- system ("pause");
- return 0;
- }
0
上一篇:稀疏矩阵的存储与快速转置
下一篇:二叉树的深度和分支节点数
相关热门文章
- 30岁女教师开宝马下乡教书 每...
- ok6410的Nand Flash驱动
- 李体育老师义务教拳
- 学练太极拳十三要
- 致远棋牌 陳凱歌姓陳是女孩拿...
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- 怎么样找出BIND中查询并发量多...
- 可有人在实际的openstack生产...
- 如下makefile如何编写
- sqlldr 参数配置
- 讨论一下各位所管理的mysql生...
给主人留下些什么吧!~~
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
华润银行电话
华润国际二手房
华润小径湾酒店
华润内墙漆价格
华润万家几点关门
华润橡树湾别墅
华润二十四城二手房
华润煤业供应商
华润橡树湾户型
华润乳胶漆怎么样
华润二十四城售楼部
华润中心凯旋门
华润橡树湾二手房
华润外墙漆价格表
华润五彩城购物中心
华润中心悦府
华润电厂招聘信息
华润保险经纪有限公司
华润油漆好吗
华润橡树湾精装修
华润电厂招聘
华润墙漆价格
华润置地橡树湾
华润 集团 有限公司
华润保险经纪
华润电力 怎么样
赤链华游蛇
st华源
华源
华源留学
华源一里8号院
华源马丽娟个人资料
安徽华源医药采购平台
安徽华源医药股份有限公司
安徽华源
药品批发网上进药
华源包装
华源医药商城
华源医药手机版
华源医药
安徽华源医药