文章
117
粉丝
0
获赞
0
访问
5.5k
(1)算法的基本设计思想,采用中序序列遍历二叉树在进入左子树之前如果当前节点是父节点的左节点并且左子树为空,则打印左括号“(”,然后左根右遍历 如果当前节点是父节点的右节点,并且该节点没有左子树和右子树则打印右括号")",递归完成打印
(2)
typedef char Datatype;
typedef struct BTNode{
Datatype data;
struct BTNode* lchild, *rchild;
}BTNode;
void fun(BTNode* p, int deep){
if (p != NULL){
if ((p -> lchild || p> rchild) && deep > 1){
cout << "("
}
if (p -> lchild != NULL){
fun(p -> lchild, deep + 1);
}
cout << p-> data;
if (p-> rchild != NULL){
fun(p -> rchild, deep + 1);
}
if ((p -> lchild || p -> rchild) && deep > 1){
cout << ")"
}
}
}
void print(BTNode* p){
fun(p,1);
}
评分及理由
(1)得分及理由(满分5分)
得分:3分
理由:学生的设计思想基本正确,提到了中序遍历和括号的添加,但描述不够清晰和准确。特别是关于括号添加的条件描述有误(如“如果当前节点是父节点的左节点并且左子树为空”这一条件不正确)。标准答案中明确指出括号的添加是基于深度而非父节点关系。
(2)得分及理由(满分10分)
得分:6分
理由:学生的代码实现了中序遍历和括号的添加,但存在以下问题:
1. 数据类型定义不一致(题目要求char data[10]
,学生使用了Datatype data
)。
2. 括号...
登录后发布评论
暂无评论,来抢沙发