文章
8
粉丝
0
获赞
1
访问
611
(1)利用二叉树的深搜,递归检查每个节点是否符合条件,若左右子树有一个不满足条件或不存在则返回false。设置变量count=0,记录符合条件的非叶节点。递归函数的参数中维护一个当前最小值min_d与左右子树的最小距离比较,若相等则符合条件。
(2)
count=0;//全局变量记录符合条件的结点数
int dfs(TreeNode* root,int d){
if(root->left==NULL||root->right==NULL)return -1;
int li=dfs(root,abs(root->data - root->left->data));
int ri=dfs(root,abs(root->data - root->right->data));
if(li!=-1&&ri!=-1){//执行比对最小值是否相等
count++;//相等则+1
return min(abs(root->data - root->left->data),abs(root->data - root->right->data));
}
return -1;
}
int countNodes(TreeNode* root){
dfs(root,INT_MAX);
return count;
}
(3)节点数为记为n,深搜dfs的时间复杂度为O(n)
评分及理由
(1)得分及理由(满分3分)
学生答案的基本设计思想描述不清晰,且存在逻辑错误。学生提到“递归检查每个节点是否符合条件,若左右子树有一个不满足条件或不存在则返回false”,但未明确说明如何计算左右子树的最小距离,且递归函数参数设计不合理(参数d未在函数内使用)。与标准答案的暴力解思想部分相关,但描述不完整且关键细节缺失。因此扣2分,得1分。
(2)得分及理由(满分9分)
学生代码存在多处严重逻辑错误:
1. 递归函数dfs的参数设计错误:参数d未使用,且递归调用时传递的参数不合理(传递abs差值而非子树根节点)。
2. 递归终止条件错误:仅检查左右子树是...
登录后发布评论
暂无评论,来抢沙发