文章

59

粉丝

0

获赞

1

访问

12.1k

头像
2014年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年8月4日 23:44
阅读数 34

(1)采用二叉树的先序遍历递归实现,设置一个值n用于表示当前访问节点的深度,sum用于计算二叉树的WPL,当访问到左右子树均为空的结点时,将sum加上n*WPL

(2)

typedef struct BitTree

{

int weight;

struct BitTree *lchild,*rchild;

}

(3)

int sum=0;

int n=1;

void PreOrder(BitTree T,int n)

{

if(T->left==NULL&&T->right==NULL)

{

sum+=(n+1)*T->weight;//此时位于叶子结点的双亲结点,应将深度+1计算长度
}

else

{

PreOrder(T->left,n+1);

PreOrder(T->right,n+1);

}
}

cout<<sum;


评分及理由

(1)得分及理由(满分3分)

得分:3分

理由:学生的设计思想与标准答案一致,采用先序遍历递归实现,并正确描述了如何计算WPL。思路清晰,符合题目要求。

(2)得分及理由(满分4分)

得分:3分

理由:学生的数据类型定义基本正确,但结构体名称与标准答案不一致(BitTree vs BiTNode),且缺少了指针类型的定义(*BiTree)。扣1分。

(3)得分及理由(满分6分)

得分:4分

理由:学生的算法实现存在以下问题:

  • 1. 在叶子结点判断时,使用了T->leftT->right,但结构体定义中使用了lchildrchild,导致逻辑错误。扣1分。
  • 2. 在计算叶子结点的深度时,使用了(n+1)*T->weight,但递归调用时已经传递了n+1,导致深度计算错误。扣1分。
  • 3. 缺少对空树的处理,且sumn的初始化位置不合理(应为局部变量或静态变量)。扣1分。

算法整体思路正确,但实现细节有误。

题目总分:3+3+4=10分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发