二叉树只能采用二又链表来存储.,这个是否正确,为什么?

樊惠丽 2019-12-21 18:28:00

推荐回答

,int&count{//递归方法,ifT{if!T->lchild&&!T->rchildcount++;CountLeafT->lchild,count;//统计左子树中叶子结点个数CountLeafT->rchild,count;//统计右子树中叶子结点个数}}----------非递归,就是采用前序/中序/后序遍历所有节点,并统计。下面就给你提供分别用三个函数的统计方法PS:因为计数器定义为全局,所以三个函数不能同时使用,使用其中一个就能统计你要的节点数。include"stdlib.h"#defineMAXNODE20#defineISIZE8#defineNSIZE07#defineNSIZE18#defineNSIZE215//SHOWCHAR=1显示字符SHOWCHAR=0显示数字#defineSHOWCHAR1//二叉树结构体structBTNode{intdata;BTNode*rchild;BTNode*lchild;};//非递归遍堆栈structABTStack{BTNode*ptree;ABTStack*link;};staticpCounter=0;//计数器,记录节点个数/*前序遍历函数pre_Order_Access参数描述:BTNode*head:根节点指针*/voidpre_Order_AccessBTNode*head{BTNode*pt;ABTStack*ps,*top;pt=head;top=NULL;printf"二叉树的前序遍历结果: ";whilept!=NULL||top!=NULL/*未遍历完,或堆栈非空*/{whilept!=NULL{ifSHOWCHARprintf"%c",pt->data;/*访问根节点*/elseprintf"%d",pt->data;/*访问根节点*/ps=ABTStack*mallocsizeofABTStack;/*根节点进栈*/ps->ptree=pt;ps->link=top;top=ps;pt=pt->lchild;/*遍历节点右子树,经过的节点依次进栈*/pCounter++;}iftop!=NULL{pt=top->ptree;/*栈顶节点出栈*/ps=top;top=top->link;freeps;/*释放栈顶节点空间*/pt=pt->rchild;/*遍历节点右子树*/}}}/*中序遍历函数mid_Order_Access参数描述:BTNode*head:根节点指针*/voidmid_Order_AccessBTNode*head{BTNode*pt;ABTStack*ps,*top;intcounter=1;pt=head;top=NULL;printf"二叉树的中序遍历结果: ";whilept!=NULL||top!=NULL/*未遍历完,或堆栈非空*/{whilept!=NULL{ps=ABTStack*mallocsizeofABTStack;/*根节点进栈*/ps->ptree=pt;ps->link=top;top=ps;pt=pt->lchild;/*遍历节点右子树,经过的节点依次进栈*/pCounter++;}iftop!=NULL{pt=top->ptree;/*栈顶节点出栈*/ps=top;top=top->link;freeps;/*释放栈顶节点空间*/ifSHOWCHARprintf"%c",pt->data;/*访问根节点*/elseprintf"%d",pt->data;/*访问根节点*/pt=pt->rchild;/*遍历节点右子树*/}}}/*后序遍历函数last_Order_Access参数描述:BTNode*head:根节点指针*/voidlast_Order_AccessBTNode*head{BTNode*pt;ABTStack*ps,*top;intcounter=1;pt=head;top=NULL;printf"二叉树的后序遍历结果: ";whilept!=NULL||top!=NULL/*未遍历完,或堆栈非空*/{whilept!=NULL{ps=ABTStack*mallocsizeofABTStack;/*根节点进栈*/ps->ptree=pt;ps->link=top;top=ps;pt=pt->lchild;/*遍历节点右子树,经过的节点依次进栈*/pCounter++;}iftop!=NULL{pt=top->ptree;/*栈顶节点出栈*/ps=top;top=top->link;freeps;/*释放栈顶节点空间*/printf"%c",pt->data;/*访问根节点*/pt=pt->rchild;/*遍历节点右子树*/}}。
籍尹超2019-12-21 18:57:22

提示您:回答为网友贡献,仅供参考。

其他回答

  • #includeusingnamespacestd;structtree{intx;tree*left;tree*right;};inti=0;tree*Creattree*t//构建二叉树按先序输入数字,0表示空树{intxx;cin>>xx;if!xxt=NULL;else{t=newtree;t->x=xx;t->left=Creatt->left;t->right=Creatt->right;}returnt;}voidinordertree*t//中序遍历{ift{inordert->left;coutxright;}}voidCounttree*t//统计叶子结点{ift{ift->left==NULL&&t->right==NULLi++;else{Countt->left;Countt->right;}}}intmainvoid{tree*node;node=Creatnode;inordernode;cout<
    连俸平2019-12-21 19:38:46
  • #include#includetypedefstructnode*tree_pointer;structnode{charch;tree_pointerleft_child,right_child;};tree_pointerroot=NULL;tree_pointercreatetree_pointerptr{charch;scanf"%c",&ch;ifch==''''ptr=NULL;else{ptr=tree_pointermallocsizeofnode;ptr->ch=ch;ptr->left_child=createptr->left_child;ptr->right_child=createptr->right_child;}returnptr;}voidpreordertree_pointerptr{ifptr{printf"%c",ptr->ch;preorderptr->left_child;preorderptr->right_child;}}voidinordertree_pointerptr{ifptr{inorderptr->left_child;printf"%c",ptr->ch;inorderptr->right_child;}}voidpostordertree_pointerptr{ifptr{postorderptr->left_child;postorderptr->right_child;printf"%c",ptr->ch;}}voidmain{printf"构建一个二叉树(结点数为n:";root=createroot;printf"前序遍历二叉树:";preorderroot;printf"";printf"中序遍历二叉树:";inorderroot;printf"";printf"后序遍历二叉树:";postorderroot;printf"";。
    龚峻梅2019-12-21 19:14:22
  • 答案:C。用二叉链表存储结构也就是左孩子右兄弟的存储结构。后序遍历比较合理。正常的逻辑应该就是:做好当前结点子树内部的交换,然后交换当前结点的左右子树。刚好符合后序遍历的算法逻辑。1、交换好左子树2、交换好右子树3、交换左子树与右子树其他算法如先序和按层次其逻辑都差不多,即访问当前结点时交换其左右子树。从逻辑上来看稍显别扭一点点。因此说最合适应该是后序遍历,但是从实现上来说先序和按层次都是可以的。1、交换左子树与右子树2、遍历左子树3、遍历右子树按层次遍历1、根结点入队列2、出队列,交换其左右子树,将子树的根入队列3、重复2直到队列为空中序遍历相对较难实现一些。扩展资料:树的遍历是树的一种重要的运算。树的3种最重要的遍历方式分别称为前序遍历、中序遍历和后序遍历。以这3种方式遍历一棵树时,若按访问结点的先后次序将结点排列起来,就可分别得到树中所有结点的前序列表、中序列表和后序列表。相应的结点次序分别称为结点的前序、中序和后序。遍历。
    贾鹤鹏2019-12-21 18:41:15

相关问答

,int&count{//递归方法,ifT{if!T->lchild&&!T->rchildcount++;CountLeafT->lchild,count;//统计左子树中叶子结点个数CountLeafT->rchild,count;//统计右子树中叶子结点个数}}----------非递归,就是采用前序/中序/后序遍历所有节点,并统计。下面就给你提供分别用三个函数的统计方法PS:因为计数器定义为全局,所以三个函数不能同时使用,使用其中一个就能统计你要的节点数。include"stdlib.h"#defineMAXNODE20#defineISIZE8#defineNSIZE07#defineNSIZE18#defineNSIZE215//SHOWCHAR=1显示字符SHOWCHAR=0显示数字#defineSHOWCHAR1//二叉树结构体structBTNode{intdata;BTNode*rchild;BTNode*lchild;};//非递归遍堆栈structABTStack{BTNode*ptree;ABTStack*link;};staticpCounter=0;//计数器,记录节点个数/*前序遍历函数pre_Order_Access参数描述:BTNode*head:根节点指针*/voidpre_Order_AccessBTNode*head{BTNode*pt;ABTStack*ps,*top;pt=head;top=NULL;printf"\n二叉树的前序遍历结果:\t";whilept!=NULL||top!=NULL/*未遍历完,或堆栈非空*/{whilept!=NULL{ifSHOWCHARprintf"%c",pt->data;/*访问根节点*/elseprintf"%d",pt->data;/*访问根节点*/ps=ABTStack*mallocsizeofABTStack;/*根节点进栈*/ps->ptree=pt;ps->link=top;top=ps;pt=pt->lchild;/*遍历节点右子树,经过的节点依次进栈*/pCounter++;}iftop!=NULL{pt=top->ptree;/*栈顶节点出栈*/ps=top;top=top->link;freeps;/*释放栈顶节点空间*/pt=pt->rchild;/*遍历节点右子树*/}}}/*中序遍历函数mid_Order_Access参数描述:BTNode*head:根节点指针*/voidmid_Order_AccessBTNode*head{BTNode*pt;ABTStack*ps,*top;intcounter=1;pt=head;top=NULL;printf"\n二叉树的中序遍历结果:\t";whilept!=NULL||top!=NULL/*未遍历完,或堆栈非空*/{whilept!=NULL{ps=ABTStack*mallocsizeofABTStack;/*根节点进栈*/ps->ptree=pt;ps->link=top;top=ps;pt=pt->lchild;/*遍历节点右子树,经过的节点依次进栈*/pCounter++;}iftop!=NULL{pt=top->ptree;/*栈顶节点出栈*/ps=top;top=top->link;freeps;/*释放栈顶节点空间*/ifSHOWCHARprintf"%c",pt->data;/*访问根节点*/elseprintf"%d",pt->data;/*访问根节点*/pt=pt->rchild;/*遍历节点右子树*/}}}/*后序遍历函数last_Order_Access参数描述:BTNode*head:根节点指针*/voidlast_Order_AccessBTNode*head{BTNode*pt;ABTStack*ps,*top;intcounter=1;pt=head;top=NULL;printf"\n二叉树的后序遍历结果:\t";whilept!=NULL||top!=NULL/*未遍历完,或堆栈非空*/{whilept!=NULL{ps=ABTStack*mallocsizeofABTStack;/*根节点进栈*/ps->ptree=pt;ps->link=top;top=ps;pt=pt->lchild;/*遍历节点右子树,经过的节点依次进栈*/pCounter++;}iftop!=NULL{pt=top->ptree;/*栈顶节点出栈*/ps=top;top=top->link;freeps;/*释放栈顶节点空间*/printf"%c",pt->data;/*访问根节点*/pt=pt->rchild;/*遍历节点右子树*/}}。
是美国第三大城市芝加哥的学校。学校占地三百二十二英亩,拥有一百一十座教学办公楼、两个大型图书馆,除科研以外的财政预算超过十亿美元。伊利诺伊大学芝加哥分校的教学及科研实力为全国所公认,美国卡耐基高等教育基金会特别一类科研院校的称号,在全美三千两百所经承认的高等院校中,只有八十八所被授予此项荣誉称号。伊利诺伊大学芝加哥分校拥有良好的完善的学生服务设施和网络,东西两校园都有条件很好的学生宿舍和学生活动中心学校的十余个现代化电脑中心分布在两个校园的各处教学楼中,免费提供给学生使用,其中部分电脑中心为昼夜开放。其他学生活动设施还包括:两个标准室内游泳池,一个短池室内游泳池,多个网球场,多个室内篮球场,健身房,保龄球馆和桌球等。为方便学生和教职员工,学校有免费的空调车定时往来于校园各主要教学楼之间。另外,校园内还设有餐饮店、银行、书店、发廊、课间休息室、聚会厅等多项服务设施。伊利诺伊大学芝加哥分校是芝加哥市中心主要的研究型大学,共有学生27,000余名,教育质量堪称世界一流。伊利诺伊大学芝加哥分校共有15个学院,其中包括全国最大的医学院,每年研究花费超过三亿三千二百万美元。学生总人数中本科生约占65%,研究生和专业学院学生占35%,被认为是美国多样化程度最高的大学之一。学校特色伊利诺大学芝加哥分校创立于1982年,当时是由伊利诺大学医学中心与位于芝加哥的校区合并而成,因此伊利诺大学芝加哥分校医学专业享负盛名,其中犯罪研究专业研究生排名全美第19名。伊利诺大学芝加哥分校位于国际大都会芝加哥的心脏地带,为芝加哥最大型的高等教育机构,在学术教学质量上及实际研究成果上,都相当著名,为全美排名前百名的研究型大学之一,曾被USNewsandWorldReport评为三级国家级大学,学术声誉全美排名98。伊利诺大学芝加哥分校的商业管理、工程、社会科学、健康科学、心理学、建筑学颇负盛名,深受学生们喜爱。伊利诺大学芝加哥分校在专业领域上也独树一帜,拥有多种专业的研究中心及机构,并多有杰出表现及获得多种国家级评鉴优良声誉或奖项,如:美国科学发展协会AmericanAssociationfortheAdvancementofScience、美国人文基金会NationalEndowmentfortheHumanities等。