文章
164
粉丝
0
获赞
1
访问
91.7k
(1)仅需要找到叶子节点距离根结点的距离和即可,利用类似中序遍历的思想,设置一个sums值用于计算WPL值,采用depth计算当前所处深度,若遍历到的节点无左右子树,则说明此时为叶子节点,将该节点权值乘以当前深度在加上sum,直到整颗树遍历完毕。
(2)typedef struct BitTree
{
int weight;
struct BitTree* left;
struct BitTree* right;
}BitTree,*tree;
(3)
初始化树,设置树根指针为root;
int sum=0;
int depth=1;
void Midtrav(tree* t, int depth)
{
if(t->left!=NULL) Midtrav(t->left,depth+1);
else if(t->right!=NULL) Midtrav(t->right,depth+1);
else sum+= depth*t->weight;
}
Midtrav(root,1);
cout<<sum<<endl;
评分及理由
(1)得分及理由(满分3分)
得分:1分
理由:学生基本理解了需要遍历二叉树并计算叶子节点的带权路径长度,提到了使用深度和权值相乘的累加思想。但是存在以下问题:
(2)得分及理由(满分4分)
得分:3分
理由:数据类型定义基本正确,包含了必要的weight、left、right字段,但存在以下问题:
(3)得分及理由(满分6分)
得分:1分
理由:算法实现存在严重逻辑错误:
登录后发布评论
暂无评论,来抢沙发