#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 100
typedef char TElemType;
typedef TElemType SqBiTree[MAXLEN];     //顺序存储二叉树定义//链表二叉树结构定义
typedef struct BiTNode{TElemType data;                     // ⚠️ 这个数据不是指针型struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//链表二叉树结构定义结束//栈结构创建
typedef BiTree SElemType;       // ⚠️  栈的数据类型到底该为什么? 进栈的是树指针,而不是树节点
typedef struct{SElemType *base;SElemType *top;int stacksize;
}SqStack;
//栈结构创建结束//栈 #初始化    #开始
void StackInit(SqStack *s){s->base = (SElemType*)malloc(sizeof(SElemType)*MAXLEN);s->top = s->base;s->stacksize = MAXLEN;
}
//栈 #初始化    #结束//栈 #判断空    #开始
int StackEmpty(SqStack s){if(s.base == s.top)return 1;return 0;
}
//栈 #判断空    #结束//栈 #进栈     #开始
int Push(SqStack s,SElemType e){if(s.top - s.base == s.stacksize)return 0;*(s.top++) = e;return 1;
}
//栈 #进栈     #结束//栈 #出栈     #开始
int Pop(SqStack s,SElemType *e){if(s.base == s.top)return 0;(*e) = *(--s.top);return 1;
}
//中序遍历二叉树递归结构函数
void InOrderTraverse(BiTree T){if(T){                              //先序,中序,后续的不同仅在于访问的时机,遍历路径相同InOrderTraverse( T->lchild);printf("%c",T->data);InOrderTraverse( T->rchild);}
}
//中序遍历二叉树递归结构函数结束//中序遍历二叉树的非递归算法,利用栈实现
void InOrderTraverse_NonRecursive(BiTree T){SqStack s;StackInit(&s);BiTree q,p = T;while(p||!StackEmpty(s)){if(p){Push(s,p);p = p->lchild;}else{Pop(s,&q);printf("%c",q->data);p = q->rchild;}}
}
//中序遍历二叉树的非递归算法,利用栈实现结束
typedef BiTree QElemType;
typedef struct{             //循环队列结构定义QElemType *base;int front;int rear;
}SqQueue;
//层次遍历算法,利用队列,根节点入队,分界点先入队,队非空就出队并访问节点,左孩子和右孩子非空就入队,循环void QueueInit(SqQueue *q){(*q).base = (QElemType*)malloc(sizeof(QElemType)*MAXLEN);(*q).front = (*q).rear = 0;
}
int  EnQueue(SqQueue *q,QElemType e){if(((*q).rear + 1)%MAXLEN ==(*q).front)return 0;(*q).base[(*q).rear++] = e;(*q).rear = ((*q).rear+1)%MAXLEN;return 1;
}
int DeQueue(SqQueue *q,QElemType *e){if((*q).rear == (*q).front)return 0;(*e) = (*q).base[--(*q).front];(*q).front = ((*q).front + 1)%MAXLEN;return 1;
}
int QueueEmpty(SqQueue q){if(q.front == q.rear)return 1;return 0;
}
void LevelOrder(BiTree T){          //二叉树的层次遍历SqQueue q;BiTree p;QueueInit(&q);EnQueue(&q,T);while(!QueueEmpty(q)){DeQueue(&q,&p);printf("%c",p->data);if(p->lchild)EnQueue(&q,p->lchild);if(p->rchild)EnQueue(&q,p->rchild);}
}
void CreateBiTree(BiTree *T){       //  先序递归创建二叉树  #为空树标志char ch;scanf("%c",&ch);if(ch == '#'){(*T) = NULL;}else{(*T) = malloc(sizeof(BiTNode));(*T)->data = ch;CreateBiTree(&(*T)->lchild);CreateBiTree(&(*T)->rchild);}
}void Copy(BiTree T,BiTree *NewT){               //复制二叉树if(T == NULL){(*NewT) = NULL;return;}else{(*NewT) =(BiTree)malloc(sizeof(BiTNode));(*NewT)->data = T->data;Copy(T->lchild,&(*NewT)->lchild);Copy(T->rchild,&(*NewT)->rchild);}
}
int Depth(BiTree T){if(T == NULL)return 0;else{int m = Depth(T->lchild);int n = Depth(T->rchild);if(m > n)return m+1;else return n+1;}
}
int NodeCount(BiTree T){if(T == NULL)return 0;else return NodeCount(T->lchild) + NodeCount(T->rchild)+1;
}
typedef struct BiThrTNode{TElemType data;struct BiThrTNode *lchild,*rchild;int LTag,RTag;
}BiThrTNode,*BiThrTree;
BiThrTree  pre;
void InThreading(BiThrTree p){if(p){InThreading(p->lchild);if(!p->lchild){p->LTag = 1;p->lchild = pre;}else p->LTag = 0;if(!pre->rchild){pre->RTag = 1;pre->rchild = p;}else pre->RTag = 0;pre = p;InThreading(p->rchild);}
}int main() {SqBiTree bt;            //顺序存储二叉树变量return 0;
}

数据结构严蔚敏 #二叉树 代码复现相关推荐

  1. 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...

    1.运行环境 这里说明一下这里所有的C语言代码都是基于code::blocks 20.03编译运行的.当然一些其他集成开发环境应该也是可以的,个人不太喜欢功能太过强大的IDE,因为那同样意味着相关设置 ...

  2. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

  3. 数据结构 严蔚敏 第二章 线性表

    数据结构 严蔚敏 第二章 线性表 线性表:由n个(n>=0)数据特征相同的元素构成的有限序列. 线性表的类型定义表示和实现 顺序表 存储单元地址连续 随机存取 若每个元素占用 m 个存储单元,以 ...

  4. 【计算机】数据结构-严蔚敏/清华大学P3

    [计算机]数据结构-严蔚敏/清华大学P1 第二章    线  性表 线性结构 是 一个数据元素的有序(次序)集 线性结构的基本特征: 1.  集合中必存在唯一的一个"第一元素": ...

  5. 数据结构----严蔚敏

    最近一直想找一本纯数据结构的书来学习,找来找去都没有找到一本合适的书籍,相比之下国内的书籍之中,严蔚敏和吴伟民的还算是经典版了,很多国内其他数据结构教材都参考这本书的.但缺点是很多都是伪代码,对编程初 ...

  6. 数据结构严蔚敏清华大学pdf_2019年清华大学自动化系控制工程专业大数据方向考研经验分享...

    基本情况(以下内容仅代表个人观点) 我目前就读于西南某双非石油工程专业,2019考研报考清华大学自动化系大数据工程专业,一志愿复试被刷,侥幸调剂录取至微电子系.初试总分346分(政治-63 + 英语一 ...

  7. 数据结构 c语言(严蔚敏) 总结 + 代码

    第一章 基本绪论 基本概念和术语 数据(Data):客观事物的符号表示,所有能够输入计算中并被计算机处理的符号的总称. 数据元素(Data Element):数据的基本单位,在计算机中作为一个整体进行 ...

  8. 【数据结构 严蔚敏版】 二叉树 基本操作

    计算机科学中,二叉树是每个结点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被 ...

  9. 数据结构严蔚敏代码合集 严书数据结构代码实现 可直接运行 持续更新by myself

    建议收藏关注,与严书代码高度一致且可实现运行. 有没更新的或者希望快点的可以催更哦. 版权声明:本文为CSDN博主「七灵微」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本 ...

  10. 线性表的顺序表示和实现 (创建,插入,删除,查找)数据结构 严蔚敏(C语言版)代码实现

    实现工具:dev 顺序表功能: 创建一个空的线性表: 在线性表中插入元素: 在线性表中删除元素: 在线性表中查找元素: 代码:(详解请看注释) #include<stdio.h> #inc ...

最新文章

  1. java 类型转换的原理
  2. python【蓝桥杯vip练习题库】ADV-288成绩排名
  3. Python统计网站访问日志log中的IP信息,并排序。。
  4. 向一个无法连接的网络尝试了一个套接字操作_python3从零学习-5.8.1、socket—底层网络接口...
  5. 冒泡算法代码java_java版本的冒泡算法
  6. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)
  7. SCVMM Self-Service Portal 2.0 SP1安装体验
  8. 世界互联网大会:华三发安全平台天机
  9. 协同过滤算法(天池竞赛试题)
  10. sql 语句美化工具
  11. DOSBox指令全 汇编指令大全 debug
  12. 学校做计算机教室锐捷,锐捷“云课堂”:先改变桌面云,再改变教室
  13. 小红书去水印代码_最新小红书视频去水印解析API接口
  14. 晶闸管相控交流调压的详细计算
  15. python中如何判断词性_Python自然语言处理 5 分类和标注词汇
  16. 用cmd打开jar文件
  17. 通过PS的图层样式制作透明的玻璃字
  18. OA系统分级审批功能
  19. upload-labs 全21关 write-up
  20. LAMP虚拟主机架设论坛

热门文章

  1. HTML页面模板代码
  2. java设置word页面为A3_word页面怎么设置为A3打印格式
  3. c语言程序设计现代方法算法pdf,c语言程序设计(排序算法).pdf
  4. 数字信号处理实验matlab版答案刘舒帆,数字信号处理实验指导书(MATLAB版) 随书代码...
  5. 使用SoapUI测试webservice接口详细步骤
  6. 官网下载Android Studio以及SDK
  7. 计算机组成原理 蒋本珊pdf,计算机组成原理 蒋本珊 习题解答.pdf
  8. 小程序菜鸟的父子组件传值、父子组件方法调用的学习
  9. Linux 命令完全手册
  10. C语言关键字浅析-case