当前位置: 首页 > news >正文

2月4号作业

 编写程序实现二叉树的创建,三种遍历自己销毁

#include <myhead.h>#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define OK 1
#define ERROR 0#define INIT_SIZE 20
#define INCREMENT_SIZE 5typedef int Status;
typedef int TElemType;
//存储结构typedef struct BiNode{TElemType data;struct BiNode *lchild, *rchild;
}BiNode, *BiTree;typedef enum {Travel = 1,Visit = 0}TaskType;typedef struct{BiTree ptr;TaskType task;
}SElemType;typedef struct{SElemType *top;SElemType *base;int size;
}Stack;//栈的数据结构
//初始化栈
Status InitStack(Stack *S)
{S->base = (SElemType *)malloc(sizeof(SElemType)*INIT_SIZE);if(!S->base)exit(OVERFLOW);S->top = S->base;S->size = INIT_SIZE;return OK;
}//判断是否为空
Status IsEmpty(Stack S){if(S.base==S.top)return TRUE;return FALSE;}
//进入栈Status Push(Stack *S,SElemType e)//*S->top++=e{if((S->top - S->base) / sizeof(SElemType)>=S->size){S->base = (SElemType*)realloc(S->base,(S->size+INCREMENT_SIZE)*sizeof(SElemType));if(!S->base)exit(OVERFLOW);S->top = S->base + S->size;//从新申请了内存地址发生了变化S->size += INCREMENT_SIZE;}*S->top = e;//先取*s->top 在++//*++S->top先加再取值;S->top++;return OK;}//pop
Status Pop(Stack *S, SElemType *e)
{if(S->top == S->base)return ERROR;*e = *--S->top;return OK;}//创建二叉树(输入0结束)
Status CreateBiTree(BiTree *T)
{TElemType s;scanf("%d",&s);if(s==0)*T=NULL;else{*T = (BiTree)malloc(sizeof(BiNode));if(!T){return OVERFLOW;}(*T)->data = s;CreateBiTree(&(*T)->lchild);//修改指针的值使其指向创建的值CreateBiTree(&(*T)->rchild);}return OK;
}
//访问元素
void visit(TElemType e)
{printf("%d ",e);}
//先序遍历递归实现
Status PreOrderTraverse(BiTree T,void(*visit)(TElemType e))
{if(T){(*visit)(T->data);PreOrderTraverse(T->lchild,visit) ;PreOrderTraverse(T->rchild,visit);}}//中序遍历Status InOrderTraverse(BiTree T,void(*visit)(TElemType e))
{if(T){InOrderTraverse(T->lchild,visit);(*visit)(T->data);InOrderTraverse(T->rchild,visit);}}// houxuStatus PostOrderTraverse(BiTree T,void(*visit)(TElemType e))
{if(T){PostOrderTraverse(T->lchild,visit);PostOrderTraverse(T->rchild,visit);(*visit)(T->data);}}//前序遍历非递归
Status  PreOrder(BiTree T,void(*visit)(TElemType e))
{Stack S;InitStack(&S);BiTree p;SElemType e;e.ptr = T;e.task = Travel;if(T)Push(&S,e);while(!IsEmpty(S)){Pop(&S,&e);if(e.task == Visit)visit(e.ptr->data);else{if(e.ptr){p = e.ptr;e.ptr = p->rchild;e.task = Travel;Push(&S,e);e.ptr = p->lchild;e.task = Travel;Push(&S,e);e.ptr = p;e.task = Visit;Push(&S,e);}}}}
//中序遍历非递归
Status  InOrder(BiTree T,void(*visit)(TElemType e))
{Stack S;InitStack(&S);BiTree p;SElemType e;e.ptr = T;e.task = Travel;if(T)Push(&S,e);while(!IsEmpty(S)){Pop(&S,&e);if(e.task == Visit)visit(e.ptr->data);else{if(e.ptr){p = e.ptr;e.ptr = p->rchild;Push(&S,e);e.ptr = p;e.task = Visit;Push(&S,e);e.ptr = p->lchild;e.task = Travel;Push(&S,e);}}}}//houxu非递归
Status  PostOrder(BiTree T,void(*visit)(TElemType e))
{Stack S;InitStack(&S);BiTree p;SElemType e;e.ptr = T;e.task = Travel;if(T)Push(&S,e);while(!IsEmpty(S)){Pop(&S,&e);if(e.task == Visit)visit(e.ptr->data);else{if(e.ptr){e.task = Visit;Push(&S,e);p = e.ptr;e.ptr = p->rchild;e.task = Travel;Push(&S,e);e.ptr = p->lchild;e.task = Travel;Push(&S,e);}}}}int main()
{BiTree T;printf("创建树,输入0为空树:\n");CreateBiTree(&T);printf("先序遍历递归:");PreOrderTraverse(T, *visit);printf("\n中序遍历递归:");InOrderTraverse(T, *visit);printf("\n后序遍历递归:");PostOrderTraverse(T, *visit);printf("\n");printf("\n前序非递归算法: ");PreOrder( T,*visit);printf("\n中序非递归算法: ");InOrder( T,*visit);printf("\n后序非递归算法: ");PostOrder( T,*visit);return 0;
}

http://www.lryc.cn/news/293783.html

相关文章:

  • 瑞_23种设计模式_建造者模式
  • GA/T 1707-2019 防爆安全门检测
  • k8s学习-数据管理
  • java hutool工具类实现将数据下载到excel
  • 【C/Python】Gtk部件ListStore的使用
  • Swift 入门之自定义类型的模式匹配(Pattern Matching)
  • MySQL-----DML基础操作
  • 提前祝大家新年好!来看看社区 2023 都得了哪些奖吧
  • Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”
  • qt-C++笔记之contains()和isEmpty()函数、以及部分其他函数列举
  • 极速搭建幻兽帕鲁私服,叫上好友春节假期一起联机畅玩帕鲁
  • MagicVideo-V2:多阶段高保真视频生成框架
  • 【三】【C++】类与对象(二)
  • ffmpeg 输入文件,输入出udp-ts 指定pid
  • 自研人工智能小工具-小蜜蜂(国外ChatGpt的平替)
  • Stable Diffusion 模型下载:ReV Animated
  • 某赛通电子文档安全管理系统 PolicyAjax SQL注入漏洞复现
  • Prometheus 采集Oracle监控数据
  • 【ARM Trace32(劳特巴赫) 使用介绍 3.1 -- 不 attach core 直接访问 memory】
  • MySQL事务和SQL优化
  • [C语言]结构体初识
  • 跨平台开发:浅析uni-app及其他主流APP开发方式
  • MyBatis常见面试题汇总
  • juc并发线程学习笔记(一)
  • 力扣热门100题刷题笔记 - 3.无重复字符的最长子串
  • 达梦数据库死锁排查与解决
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件
  • CICD注册和使用gitlab-runner常见问题
  • 关于Django部署
  • 计算机网络——01什么是InterNet