线索二叉树创建及中序遍历(待完善)
来源:互联网 发布:网络剧大话三国 编辑:程序博客网 时间:2024/06/15 15:58
菜鸡学习记录,贴代码:创建线索二叉树并中序遍历线索二叉树,前序后序这两天补上。
/*** dandelion** 线索二叉树(中序,其余待补充)** 2017-08-13**/#include<stdio.h>#include<stdlib.h>typedef char ElemType;typedef enum{Link,Thread} PointTag;typedef struct BinaryNode{ ElemType data; struct BinaryNode *lchild,*rchild; PointTag leftTag,rightTag;}BinaryNode;typedef struct BinaryNode *Bitree;int i=0;Bitree pre;/**初始化树*/void InitTree(Bitree *T){ *T=(Bitree)malloc(sizeof(BinaryNode)); if(!T) exit(0); (*T)->lchild=NULL; (*T)->rchild=NULL;}/**前序创建树*/void FirstCreate(Bitree *T,char *str){ char data = str[i]; i++; if('#'==data) *T=NULL; else { *T = (BinaryNode*)malloc(sizeof(BinaryNode)); (*T)->data = data; (*T)->leftTag=Link; (*T)->rightTag=Link; FirstCreate(&(*T)->lchild,str); FirstCreate(&(*T)->rchild,str); }}/**头结点处理*/void CreateHeadNode(Bitree *head,Bitree T){ *head = (Bitree)malloc(sizeof(BinaryNode)); (*head)->leftTag=Link; (*head)->rightTag=Thread; (*head)->rchild=*head; if(T) { (*head)->lchild=T; pre=*head; MidThreading(T); pre->rchild = *head; pre->rightTag = Thread; (*head)->rchild = pre; } else (*head)->lchild=*head;}/**中序遍历线索化*/void MidThreading(Bitree T){ if(T) { //printf("T:%c pre:%c\n",T->data,pre->data); MidThreading(T->lchild); if(!T->lchild) { T->leftTag=Thread; T->lchild=pre; } if(!pre->rchild) { pre->rightTag=Thread; pre->rchild=T; } pre = T; //printf("T:%c pre:%c\n",T->data,pre->data); MidThreading(T->rchild); }}/**中序遍历线索二叉树(非递归)*/void midTravaling(Bitree T){ Bitree temp; temp=T->lchild; while(temp!=T) { while(temp->leftTag==Link) temp=temp->lchild; printf("%c",temp->data); while(temp->rightTag==Thread && temp->rchild!=T) { temp=temp->rchild; printf("%c",temp->data); } temp = temp->rchild; }}int main(){ Bitree t,T; char str[30]; scanf("%s",str); InitTree(&T); FirstCreate(&T,str); CreateHeadNode(&t,T); printf("result:\n"); midTravaling(t); return 0;}
阅读全文
0 0
- 线索二叉树创建及中序遍历(待完善)
- 中序线索二叉树的创建、线索化和遍历(前序遍历和后序遍历)
- 【线索化二叉树】中序遍历创建线索二叉树
- 16.线索二叉树 (中序) 及 线索二叉树的中序遍历
- 线索二叉树的创建、中序遍历、左右插入
- 数据结构---线索二叉树的创建、中序遍历
- (十一)线索二叉树的创建和遍历(中序)
- 后序线索化二叉树及遍历(图解)
- 二叉树的前序、中序、后序的递归与非递归遍历算法实现(待完善)
- 中序遍历线索二叉树
- 线索二叉树的中序遍历
- 遍历中序线索二叉树
- 线索化二叉树的创建及遍历
- 数据结构-线索二叉树的创建及遍历(1)
- 先序遍历/后序遍历创建线索二叉树
- 中序线索化二叉树以及中序遍历线索化二叉树、倒中序遍历线索化二叉树
- 中序二叉树、队列实现层次遍历、中序线索二叉树的创建与遍历
- 线索二叉树的前、中、后序创建和遍历
- NOIP 2001普及组 装箱问题详解
- Codeforces Round #428 (Div 2) B
- 一道容易出错的题目(有关负数的补码)
- 贪心算法总结
- Python 模块安装
- 线索二叉树创建及中序遍历(待完善)
- 从bagging到dropout(deep learning笔记Ian)
- failed to resolve :com.facebook.fresco:0.6.0+ 报错解决
- java-内省
- 安装 Docker Machine
- pat:L1-034. 点赞
- 周期循环图像边界算法
- Chapter 4
- SQL注入之联合注入