当前位置:首页 >> 韩语学习 >>

2015年澳门特别行政区重要数据摘要


1、设 T 是一棵满二叉树,编写一个将 T 的先序遍历序列转换为后序遍历序列的递归算法。 2、 我们可用 “破圈法” 求解带权连通无向图的一棵最小代价生成树。 所谓 “破圈法” 就是 “任 取一圈,去掉圈上权最大的边” ,反复执行这一步骤,直到没有圈为止。请给出用“破圈法” 求解给定的带权连通无向图的一棵最小代价生成树的详细算法,并用程序实现你所给出的算 法。注:圈就是回路。 3、假设以 I 和 O 分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列 可表示为仅由 I 和 O 组成的序列,称可以操作的序列为合法序列,否则称为非法序列。 (15 分) (1)A 和 D 是合法序列,B 和 C 是非法序列。 (2)设被判定的操作序列已存入一维数组 A 中。 int Judge(char A[]) //判断字符数组 A 中的输入输出序列是否是合法序列。如是,返回 true,否则返回 false。 {i=0; //i 为下标。 j=k=0; //j 和 k 分别为 I 和字母 O 的的个数。 while(A[i]!=‘\0’) //当未到字符数组尾就作。 {switch(A[i]) {case‘I’: j++; break; //入栈次数增 1。 case‘O’: k++; if(k>j){printf(“序列非法\n”);exit(0);} } i++; //不论 A[i]是‘I’或‘O’ ,指针 i 均后移。} if(j!=k) {printf(“序列非法\n”);return(false);} else {printf(“序列合法\n”);return(true);} }//算法结束。 4、 二叉树的层次遍历序列的第一个结点是二叉树的根。实际上,层次遍历序列中的每个结 点都是 “局部根” 。 确定根后, 到二叉树的中序序列中, 查到该结点, 该结点将二叉树分为 “左 根右”三部分。若左、右子树均有,则层次序列根结点的后面应是左右子树的根;若中序序 列中只有左子树或只有右子树,则在层次序列的根结点后也只有左子树的根或右子树的根。 这样,定义一个全局变量指针 R,指向层次序列待处理元素。算法中先处理根结点,将根结 点和左右子女的信息入队列。然后,在队列不空的条件下,循环处理二叉树的结点。队列中 元素的数据结构定义如下: typedef struct { int lvl; //层次序列指针,总是指向当前“根结点”在层次序列中的位置 int l,h; //中序序列的下上界 int f; //层次序列中当前“根结点”的双亲结点的指针 int lr; // 1—双亲的左子树 2—双亲的右子树 }qnode; BiTree Creat(datatype in[],level[],int n) //由二叉树的层次序列 level[n]和中序序列 in[n]生成二叉树。 n 是二叉树的结点数 {if (n<1) {printf(“参数错误\n”); exit(0);} qnode s,Q[]; //Q 是元素为 qnode 类型的队列,容量足够大 init(Q); int R=0; //R 是层次序列指针,指向当前待处理的结点 BiTree p=(BiTree)malloc(sizeof(BiNode)); //生成根结点

p->data=level[0]; p->lchild=null; p->rchild=null; //填写该结点数据 for (i=0; i<n; i++) //在中序序列中查找根结点,然后,左右子女信息入队列 if (in[i]==level[0]) break; if (i==0) //根结点无左子树,遍历序列的 1—n-1 是右子树 {p->lchild=null; s.lvl=++R; s.l=i+1; s.h=n-1; s.f=p; s.lr=2; enqueue(Q,s); } else if (i==n-1) //根结点无右子树,遍历序列的 1—n-1 是左子树 {p->rchild=null; s.lvl=++R; s.l=1; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s); } else //根结点有左子树和右子树 {s.lvl=++R; s.l=0; s.h=i-1; s.f=p; s.lr=1;enqueue(Q,s);//左子树有关信息入队列 s.lvl=++R; s.l=i+1;s.h=n-1;s.f=p; s.lr=2;enqueue(Q,s);//右子树有关信息入队列 } while (!empty(Q)) //当队列不空,进行循环,构造二叉树的左右子树 { s=delqueue(Q); father=s.f; for (i=s.l; i<=s.h; i++) if (in[i]==level[s.lvl]) break; p=(bitreptr)malloc(sizeof(binode)); //申请结点空间 p->data=level[s.lvl]; p->lchild=null; p->rchild=null; //填写该结点数据 if (s.lr==1) father->lchild=p; else father->rchild=p; //让双亲的子女指针指向该结点 if (i==s.l) {p->lchild=null; //处理无左子女 s.lvl=++R; s.l=i+1; s.f=p; s.lr=2; enqueue(Q,s); } else if (i==s.h) {p->rchild=null; //处理无右子女 s.lvl=++R; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s); } else{s.lvl=++R; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);//左子树有关信息入队 列 s.lvl=++R; s.l=i+1; s.f=p; s.lr=2; enqueue(Q,s); //右子树有关信息入队列 } }//结束 while (!empty(Q)) return(p); }//算法结束


相关文章:
2015年澳门特别行政区数据要领摘要
2015年澳门特别行政区数据要领摘要_韩语学习_外语学习_教育专区。2015年澳门特别行政区数据要领摘要 1、对二叉树的某层上的结点进行运算,采用队列结构按层次遍历最...
2015年澳门特别行政区数据整理摘要
2015年澳门特别行政区数据整理摘要_韩语学习_外语学习_教育专区。2015年澳门特别行政区数据整理摘要 1、二叉树的层次遍历序列的第一个结点是二叉树的根。实际上,...
2014年澳门特别行政区重要数据摘要
2014年澳门特别行政区重要数据摘要_韩语学习_外语学习_教育专区。2014年澳门特别...文档贡献者 pvrbnqte586056 贡献于2015-12-27 相关文档推荐 暂无相关推荐文档...
2015年澳门特别行政区重要数据大纲
2015年澳门特别行政区重要数据大纲_韩语学习_外语学习_教育专区。2015年澳门特别行政区重要数据大纲 1、在有向图 G 中,如果 r 到 G 中的每个结点都有路径可达...
2015年澳门特别行政区重要数据入门
2015年澳门特别行政区重要数据入门_数学_小学教育_教育专区。2015年澳门特别行政区重要数据入门 1、有一个带头结点的单链表,每个结点包括两个域,一个是整型域 ...
2015年澳门特别行政区重要数据基础
2015年澳门特别行政区重要数据基础_韩语学习_外语学习_教育专区。2015年澳门特别行政区重要数据基础 1、4、 void LinkList_reverse(Linklist &L) //链表的就地...
2012年澳门特别行政区理论数据摘要
2012年澳门特别行政区理论数据摘要_韩语学习_外语学习_教育专区。2012年澳门特别行政区理论数据摘要 1、4、 void LinkList_reverse(Linklist &L) //链表的就地...
2012年澳门特别行政区数据总结摘要
2012年澳门特别行政区数据总结摘要_韩语学习_外语学习_教育专区。2012年澳门特别...文档贡献者 fnzncabg259510 贡献于2015-12-18 相关文档推荐 暂无相关推荐文档...
2015年澳门特别行政区C#语言摘要
2015年澳门特别行政区C#语言摘要_韩语学习_外语学习_教育专区。2015年澳门特别...队列中 元素的数据结构定义如下: typedef struct { int lvl; //层次序列指针...
2013年澳门特别行政区理论数据摘要
2013年澳门特别行政区理论数据摘要_韩语学习_外语学习_教育专区。2013年澳门特别...文档贡献者 isltgprz364726 贡献于2015-12-05 相关文档推荐 暂无相关推荐文档...
更多相关标签: