文章
59
粉丝
0
获赞
1
访问
12.1k
(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分
理由:学生的算法实现存在以下问题:
T->left
和T->right
,但结构体定义中使用了lchild
和rchild
,导致逻辑错误。扣1分。(n+1)*T->weight
,但递归调用时已经传递了n+1
,导致深度计算错误。扣1分。sum
和n
的初始化位置不合理(应为局部变量或静态变量)。扣1分。算法整体思路正确,但实现细节有误。
题目总分:3+3+4=10分
登录后发布评论
暂无评论,来抢沙发