首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。 【说明】 本程序利用非递归算法实现二叉树后序遍历。 【函数】 #include<stdio.h> #include<stdlib.h> typedef s
阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。 【说明】 本程序利用非递归算法实现二叉树后序遍历。 【函数】 #include<stdio.h> #include<stdlib.h> typedef s
admin
2010-01-15
46
问题
阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。
【说明】
本程序利用非递归算法实现二叉树后序遍历。
【函数】
#include<stdio.h>
#include<stdlib.h>
typedef struct node{/*二叉树的结点数据结构类型*/
char data;
struct node *left;
struct node *right;
}BTREE;
void SortTreelnsert(BTREE **tree, BTREE *s)
{
if(*tree==NULL)*tree=s;
else
if(s->data<(*tree)->data)
SortTreelnsert((1),s);
else if(s->data>=(*tree)->data)
SortTreelnsert((2),s);
}
void TraversalTree(BTREE *tree)
{
BTREE *stack[1 000],*p;
int tag[1000],top=0;
p=tree;
do{
while(p !=NULL)
{
stack[++top]=p;
(3);
tag[top]=0; /*标记栈顶结点的左子树已进行过后序遍历*/
}
while(top>0&&(4))/*栈顶结点的右子树是否被后序遍历过*/
{
p=stack[top--];
putchar(p->data);
}
if(top>0)/*对栈顶结点的右子树进行后序遍历*/
{
(5);
tag[top]=1;
}
}while(top>0);
}
void PrintSortTree(BTREE *tree)
{
if(tree !=NULL)
{
printSortTree(tree->left);
putchar(tree->data);
pdntSortTree(tree->right);
}
}
main()
{
BTREE *root=NULL, *node;
char ch;
ch=getchar();
while(ch !=’#’)
{
node=(BTREE*)malloc(sizeof(BTREE));
node->data=ch;
node->left=node->right=NULL;
SortTreelnsert(&root, node);
ch=getchar();
}
PrintSortTree(root);
putchar(’\n’);
TraversalTree(root);
}
选项
答案
(1)&(*tree)->left (2)&(*tree)->right (3)p=p->left (4)tag[top]==1 (5)p=stack[top]->right
解析
本题考查二叉树后序遍历的非递归实现。
二叉树后序遍历的特点是首先按后序遍历根结点的左子树,然后按后序遍历根结点的右子树,再访问根结点。后序遍历得到的序列根结点总在最后,我们可以用栈结构来实现后序遍历。下面来具体[分析]程序。
第(1)空很明显是函数SortTreeInsert()的第一个参数,此函数的功能是建立一棵排序二叉树,此空在条件判断语句下面,如果条件成立,说明待插入结点的值小于当前结点的值,根据排序二叉树的生成原理,应该把待插入结点插入到当前结点的左子树中,因此,此空的参数是指向当前结点左子树的地址。这里需要注意的是,这个参数是一个二重指针,需要在一重指针前加一个取地址操作符“&”。所以,此空答案为&(*tree)->left。
第(2)空也是函数SortTreeInsert()的第一个参数,但调用这个函数的条件与上面不一样,此空是在待插入结点的值大于等于当前结点的值的时候调用函数,根据排序二叉树的生成原理,此时应该把待插入结点插入到当前结点的右子树中,因此,此空答案为&(*tree)->right。
第(3)空在函数TraversalTree()中,此函数用来对树进行后序遍历,此空在一个循环体中,从程序中可以看出这个循环体的功能是将排序二叉树的所有左子树结点入栈,因此,在当前结点入栈后,接下来是它的孩子结点入栈,所以,此空答案为p=p->left。
第(4)空是循环的判断条件,其作用在注释中已经给出,是判断栈顶结点的右子树是否被后序遍历过。从上面程序tag[top]=0表示栈顶结点的左子树已进行过后序遍历可以推断出,tag[top]的值是用来标记栈顶结点的左右子树已进行过后序遍历,因此,此空答案为tag[top]==1。
第(5)空在条件判断语句下面,而条件判断语句为真表明要对栈顶结点的右子树进行后序遍历,那么就应该让当前需处理结点的指针指向栈顶结点的右孩子,而指向当前需要处理结点的指针变量是p,因此,此空答案为p=stack[top]->right。
转载请注明原文地址:https://kaotiyun.com/show/RBjZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
对数据分析处理人员的素质要求不包括()。
企业信息化总体架构的核心部分包括业务架构、信息架构、应用架构和技术架构四个部分,其中面向最终用户的是()。
某单位的统计报表比较多,采用表号(报表的编号)的好处是______。
在Excel的A1单元格中输入函数“=ROUND(3.1415,2)”,则A1单元格中显示的值为(57)。
在Excel2007中,在单元格A1中输入函数“=POWER(2,3)/MAX(1,2,4)”,按回车键后,则A1单元格中的值为__________。
《信息技术汉字字型要求和检测方法》(GB/T11460一一2009)属于______。
在Excel的A1单元格中输入函数“=IF(12,1,2)”,按回车键后,A1单元格中的值为()。
下列关于防火墙的叙述中,不正确的是(17)。
以下关于喷墨打印机的叙述中,不正确的是(17)。
在文档中插入形状“圆”后,在圆心位置输入了字符C却看不到,为将字符C显示出来,可以右击该形状,选择将其__________。
随机试题
根据外国投资者对上市公司战略投资的规定,下列情况下,外国投资者可以在证券交易市场售出A股股票的有()。
蔬菜经择剔、整理后,一般采用冷水洗涤、盐水洗涤和________三种方法进行洗涤。
患者,男,年龄不详。因昏迷被送来就诊,嘴唇发绀、气促、躁动不安,呼吸呈潮式呼吸,血pH值7.2,PaCO2>48mmHg,SB及AB升高,AB>SB,血清钾升高,血清氯降低。应考虑的诊断是
16岁女性,患感冒后出现眼睑下垂9天。无多汗、震颤等表现。检查:血压正常。瞳孔正圆、等大,对光反射存在。右眼外展、内收有中度障碍,向上、向下视也有轻度障碍。左眼只有轻度内收障碍。眼轮匝肌、咬肌、口轮匝肌有轻度肌力减退。四肢肌力正常。无肌萎缩,无反射异常和感
门静脉高压症的主要原因是
Onedayapoliceofficermanagedtogetsomefreshmushrooms.Hewasso【C1】______whathehadboughtthatheofferedto【C2】______
据调查,大学生事业成功因素中。人脉排第一,运气排第二,个人:奋斗排第三,为此你怎么看?为什么?
一、注意事项1.申论考试与传统的作文考试不同,是分析驾驭材料的能力与表达能力并重的考试。2.仔细阅读给定的资料,按照后面提出的“答题要求”依次作答。二、给定资料资料一中国青年报社调中心通过题客调查网,针对“城市交通”话题
EvelynCokespent20yearsasahomecareaidehelpingtheelderlyandthesick,butshedidnotliveandseefairlaborlaws【M1
John,alongwithhistwofriends,(be)______goingtothecinemathisevening.
最新回复
(
0
)