C语言 题目 1698: 数据结构-线索二叉树
《大话数据结构》上的,大家可以参考一下
题目描述
输入格式
输出格式
样例输入
<span style="color:#333333"><span style="color:#333333">ABC DE G F </span></span>
样例输出
<span style="color:#333333"><span style="color:#333333">C B E G D F A </span></span>
#include<stdio.h>
#include<stdlib.h>
typedef enum{link,thread} pointerflag;
typedef struct BiTree{char c;struct BiTree *lchild,*rchild;pointerflag lflag;pointerflag rflag;
}*bitree,BITNODE;
bitree pre=NULL;//pre是全局变量,始终指向前驱结点
void creattree(bitree *);//建立二叉树
void thread_(bitree*,bitree);//线索化之前的准备
void threading(bitree);//线索化
void ThreadTraverse(bitree);//中序遍历
int main(){bitree head=NULL;//指向头结点 bitree t=NULL;//指向根节点 creattree(&t);//创建根节点 thread_(&head,t);//线索化 ThreadTraverse(head);//中序遍历
}
void creattree(bitree* t){char c;c=getchar();if(c==' '){(*t)=NULL;}else{(*t)=(bitree)malloc(sizeof(BITNODE));(*t)->c=c;creattree(&(*t)->lchild);creattree(&(*t)->rchild);}
}
void thread_(bitree* head,bitree t){(*head)=(bitree)malloc(sizeof(BITNODE));(*head)->lflag=link;(*head)->rflag=thread;(*head)->rchild=(*head);//右指针回指 if(!t)(*head)->lchild=*head;//左指针回指 else{(*head)->lchild=t;//有根结点 pre=(*head);threading(t);pre->rchild=*head;pre->rflag=thread;//最后一个结点线索化 (*head)->rchild=pre;}
}
void threading(bitree t){//线索化 if(t){threading(t->lchild);if(!(t->lchild)){t->lflag=thread;t->lchild=pre;}elset->lflag=link;if(!(pre->rchild)){pre->rflag=thread;pre->rchild=t;}elset->rflag=link;pre=t;threading(t->rchild);}
}
void ThreadTraverse(bitree head){bitree p=head->lchild;//根结点开始 while(p!=head){while(p->lflag==link){//因为是中序遍历,所以先找最左的结点 p=p->lchild;}printf("%c ",p->c);while(p->rflag==thread&&p->rchild!=head){p=p->rchild;printf("%c ",p->c);}p=p->rchild;//意味着有右孩子,那么,p将成为新的根结点 }
}
C语言 题目 1698: 数据结构-线索二叉树相关推荐
- (原)数据结构——线索二叉树
原文地址:http://www.cnblogs.com/Security-Darren/p/4716082.html 转载务必注明出处! 线索二叉树的思想来源于二叉树的存储结构中,存在一些空的指针域, ...
- 数据结构——线索二叉树(TBT)
文章目录 一.什么是线索二叉树(TBT)? 二.线索二叉树的建立 三.线索二叉树的实现 一.什么是线索二叉树(TBT)? 线索二叉树是一种优化的二叉树结构,对于以结构体指针实现二叉树的方案进行了顺序遍 ...
- C语言 题目 1689: 数据结构-求子串位置的定位函数
题目描述 在算法4-1中已经描述过一种定位子串的算法,但其依赖字符串的其他操作(使用了算法4-3描述的子串提取以及字符串比较). 下面给出书中另一种相对独立的定位子串算法: 图:求子串位置的定位函数 ...
- C语言 题目 1688: 数据结构-字符串插入
看下图的代码块理清思路 题目描述 将一个字符串插入到另一个字符串当中.算法描述如下: 图:字符串插入算法 输入格式 输入只有一行,两个字符串(stra,strb)和一个整数 i.字符串仅由英文大小写字 ...
- C语言 题目 1701: 数据结构-自顶向下的赫夫曼编码
感觉还是自底向上简单,搜了搜答案貌似看懂了,自己手打了一遍,改写了某些看不懂的地方,又写了注释,希望对你有帮助(^∀^●)ノシ 题目描述 在本题中,我们将要讨论的是自顶向下的赫夫曼编码算法.从根出发, ...
- C语言 题目 1700: 数据结构-自底向上的赫夫曼编码
查了好久信息,五花八门,这一题需要注意筛选出两个权值最小的结点后,将位序最小的放在左子树上,位序次小的放在右子树上. 题目描述 在通讯领域,经常需要将需要传送的文字转换成由二进制字符组成的字符串.在实 ...
- 数据结构—线索二叉树
建议将思维导图保存下来观看,或点击这里在幕布上在线观看
- 【Java数据结构】线索二叉树
中序线索二叉树 线索二叉树概述 线索二叉树代码实现 线索二叉树的数据结构 线索二叉树的遍历 线索二叉树示例完整代码 线索二叉树类 ThreadedBinaryTree 线索二叉树节点类 Threade ...
- C语言数据结构之线索二叉树
C语言数据结构之线索二叉树 tips:前些天学习了二叉树的相关操作,今天来总结一下线索二叉树的操作. 线索二叉树:对二叉树以某种次序遍历得到序列中的前驱和后继,其中指向结点前驱和后继的指针称为线索,再 ...
最新文章
- Git创建本地分支并关联远程分支
- 图片预览组件PhotoView
- 第四次团队作业——系统设计
- 通过实例理解javascript 的call()与apply()
- Python 列表的应用场景有哪些?你使用对了吗?
- mac php errorlog,Mac下使用php的error_log()函数发送邮件
- react 代码编写原则_如何编写易读的React代码— 10种编码风格技巧
- span 文本内容超过宽度自动换行
- 你真的会发朋友圈吗?
- 在OL6.5_64上安装Oracle11gR2_64
- c语言中fork,C语言fork函数学习
- Linux运维基础知识
- ExactScan pro for mac(万能扫描仪整合工具)
- iOS功能测试工具 Frank
- SOLIDWORKS启动时出现脚本错误问题
- meta http-equiv 属性 详解
- 海豚调度Dolphinscheduler源码分析(三)
- 信息系统项目管理师——信息化和信息系统
- 【Golang】获取本地IP
- (转)工作是一种本能?