用非递归遍历树时只能遍历树的一部分。如树:AB C D ,运行是只能c语言如何输出空格AB,空格后的读不出了。这是为什么?

主人将内容设置为“隐藏”或“仅好友可见”了,建议您立即;如果您还不是和讯用户,建议您。二叉树递归遍历_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
二叉树递归遍历
题​目​:​假​设​二​叉​树​采​用​二​叉​链​表​结​构​。​设​计​并​实​现​如​下​算​法​:​先​序​递​归​建​树​,​中​序​非​递​归​遍​历​该​树​,​输​出​各​个​结​点​的​值​,​并​求​该​树​中​单​分​支​结​点​的​个​数​。
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩7页未读,继续阅读
你可能喜欢数据结构(二叉树遍历)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
数据结构(二叉树遍历)
所​谓​二​叉​树​遍​历​,​就​是​按​某​种​规​则​访​问​二​叉​树​的​每​个​结​点​,​且​每​个​结​点​仅​被​访​问​一​次
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩11页未读,继续阅读
你可能喜欢题目:假设二叉树采用二叉链表结构。设计并实现如下算法:先序递归建树,中序非递归遍历该树,输出各个结点的值,并求该树中单分支结点的个数。一、 需求分析1. 用户可以根据自己的需求分别输入任意的一个二叉树,并且能够实现中序非递归遍历该树输出各个结点的数值。2. 通过已有的二叉树能够求出该树的单分支结点的个数。3. 程序执行的命令包括:(1)构造二叉树T
(2)遍历二叉树
(3)求二叉树单分支结点的个数(4)求二叉树的总结点数二、概要设计⒈ 为实现上述算法,需要链表的抽象数据类型:ADT Binarytree {数据对象:D是具有相同特性的数据元素的集合数据关系R:若D为空集,则R为空集,称binarytree为空二叉树;若D不为空集,则R为{H},H是如下二元关系;(1) 在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;(2) 若D-{root}不为空,则存在D-{root}={D1,Dr},且D1∩Dr为空集;(3) 若D1不为空,则D1中存在唯一的元素x1,&root,x1&∈H,且存在D1上的关系H1是H的子集;若Dr不为空集,则Dr中存在唯一的元素Xr,&root,Xr&∈H,且存在Dr上的关系Hr为H的子集;H={&root,x1&,&root,Xr&,H1,Hr};(4)
(D1,{H1})是一颗符合本定义的二叉树,称为根的左子树,(Dr,{Hr})是一颗符合本定义的二叉树,称为根的右子树。基本操作:Creatbitree(&S,definition)初始条件:definition给出二叉树S的定义操作结果:按definition构造二叉树Scounter(T)初始条件:二叉树T已经存在操作结果:返回二叉树的总的结点数onecount(T)初始条件:二叉树T已经存在操作结果:返回二叉树单分支的节点数Clearbintree(S)初始条件:二叉树S已经存在操作结果:将二叉树S清为空树Bitreeempty(S)初始条件:二叉树S已经存在操作结果:若S为空二叉树,则返回TRUE,否则返回FALSEBitreedepth(S,&e)初始条件:二叉树S已经存在操作结果:返回S的深度Parent(S)初始条件:二叉树S已经存在,e是S中的某个结点操作结果:若e是T的非根结点,则返回它的双亲,否则返回空Preordertraverse(S)初始条件:二叉树S已经存在,Visit是对结点操作的应用函数。操作结果:先序遍历S,对每个结点调用函数visit一次且仅一次。一旦visit失败,则操作失败。Inordertraverse (S,&e)初始条件:二叉树S已经存在,Visit是对结点操作的应用函数。操作结果:中序遍历S,对每个结点调用函数visit一次且仅一次。一旦visit失败,则操作失败。Postordertraverse (&S,e)初始条件:二叉树S已经存在,Visit是对结点操作的应用函数。操作结果:后序遍历S,对每个结点调用函数visit一次且仅一次。一旦visit失败,则操作失败。}ADT Binarytree2. 本程序有三个模块:⑴ 主程序模块main(){初始化;{接受命令;显示结果;}}⑵ 先序建树的模块:主要建立一棵二叉树;⑶中序遍历模块:输出中序遍历的结果;(4)单分支结点数模块:输出单分支的结点数。三、详细设计⒈元素类型,结点类型/*定义二叉树*/typedef struct bitnode{struct bitnode *lchild,*}/*定义栈元素的类型*/typedef struct node{
struct bitnode *p;} /*定义栈*/typedef struct stack{
node *node *}2.对抽象数据类型中的部分基本操作的伪码算法如下:stack *initstack()
/*构建空栈*/{
s-&base=(struct node *)malloc(MAX*sizeof(node));if(!s-&base)
exit(0);s-&top=s-&s-&size=MAX;}/*判断栈是否为空栈*/int stackempty(stack *s){ if(s-&top==s-&base) return 1;else return 0;}/*入栈*/stack *push(stack *s,struct bitnode *t){
if(s-&top-s-&base==s-&size){
s-&base=(struct node *)realloc(s-&base,(s-&size+10)*sizeof(node));
if(!s-&base)
exit(0);s-&top=s-&base+s-&s-&size+=10;}(*s-&top).p=t;s-&top++;}/*出栈*/struct bitnode *pop(stack *s){
if(s-&top==s-&base){
printf(&这是一个空栈\n&);return 0;}else{
s-&top--;return ((*s-&top).p);}}/*取栈顶的元素*/struct bitnode *getpop(stack *s){
if(s-&top==s-&base){
printf(&这是一个的空栈!\n&);return NULL;}else
return (*(s-&top-1)).p;}/*先序递归构建二叉树*/struct bitnode *creatbitree(struct bitnode *r) {scanf(&%c&,&a);if(a==' ')
r=NULL;else{
r=(struct bitnode*)malloc(sizeof(bitnode));
r-&data=a;r-&lchild=creatbitree(r-&lchild);r-&rchild=creatbitree(r-&rchild);}}/*中序非递归遍历二叉树*/void inorder(struct bitnode *T){
struct bitnode *p,*q;p=T;s=initstack();if(p){ while(p){
push(s,p);p=p-&}while(!stackempty(s)){
p=pop(s);visit(p-&data);if(p-&rchild!=NULL){
q=p-&while(q){
push(s,q);q=q-&}}}}}

我要回帖

更多关于 c语言如何输出空格 的文章

 

随机推荐