问答题
阅读下列算法,说明程序功能,并用图示输出执行后的结果。
#include
#include
#define n 7
typedef struct Node{char data;struct Node*Lc,*Rc;)Node,*BiNode;
void unknowm(BiNode t,int i,char*a)
{t=(Node*)malloc(sizeof(Node));
t一>data=a[i];
if(2*i<=n) unknown(t一>Lc,2*i,a);
else t一>Lc=NULL;
if(2*i+1<=n) unknown(t一>Rc, 2*i+1, a);
else t一>Rc=NULL;
)
void main()
{char a[7]; a[1].‘a’;a[2]=。b’;a[3]="c"; a[4]=‘d’;a[5]="e";a[6]=‘f’;
BiNode P;int j=1;
unknown(p,J,a);
}
【北京交通大学2005六、2(8分)】
【正确答案】正确答案:本算法是由二叉树的顺序存储结构生成二叉链表的程序,二叉树按完全二叉树存储,数组定义了7个元素,下标从l开始,a[1](即字母a)是二叉树的根结点。输出结果略。需要指出,程序中给了6个结点数据,数据从下标1开始存放。在判断有无左右子女时,不应包括n=7(下标为7)的情况。应改为(2
*
i<n)和(2
*
+i<n)。
【答案解析】