文章

54

粉丝

12

获赞

0

访问

5.5k

头像
2014年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年9月5日 20:05
阅读数 52

1:采用递归遍历的方式,每遍历一层,就记录二叉树的深度,当遍历到叶子节点的时候,用该节点对应的权值*二叉树的深度 ,当遍历到非叶子节点的时候,就继续递归遍历左右子树,深度加1

2:

typedef struct BiTnode{
  struct BiTnode *left,*right;
  int weight;
}BiTree,*BiTnode

3:

int wpl=0://所有叶子节点的带权路径长度之和。
void countwpl(BiTree root,int weight){
if(root=null)
return ;
if(root->left==NULL&&root->right=NULL){
wpl+=root->weight*depth;
}
countwpl(BiTree left,depth+1);
countwpl(BiTree right,depth+1);





} 

 


评分及理由

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

学生给出的基本设计思想正确,描述了通过递归遍历记录深度,并在叶子节点处计算权值与深度的乘积,思路与标准答案中的先序遍历方法一致。但未提及static变量或如何初始化wpl,表述不够完整。扣1分。

得分:2分

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

学生给出的结点定义基本正确,但存在两处错误:一是结构体类型名BiTnode与指针类型名*BiTnode重复,应改为*BiTree;二是结尾缺少分号。扣2分。

得分:2分

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

学生代码存在多处逻辑错误:
1. 函数参数错误:应为(root, depth),但学生写成了(root, weight),且未定义depth参数;
2. 递归调用错误:应传递root->left和root->right,但学生直接传递了类型名BiTree left和BiTree right;
3. 未处理非叶子节点的递归条件,直接递归左右子树,但未检查是否为空;
4. wpl作为全局变量不合适,应使用static或返回值方式;
5. 初始调用未提供depth初始值(应为0)。
每处错误扣1分,共扣5分。

得分:1分

题目总分:2+2+1=5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发