文章
164
粉丝
0
获赞
1
访问
91.3k
(1)二叉搜索树要求左子树的所有值不大于遍历节点,右子树的所有值不小于遍历节点,采用中序遍历思想遍历该树,利用weight记录当前节点的值,访问左子树时,该值为max,访问右子树时,该值为min,在遍历时将左右子树中所有值于weight相比,仅当全部遍历完毕后,才返回true,若有一个不满足,返回false,分析可知若遍历节点为i,左子树节点为2i+1,右子树为2i+2
(2)初始化树,设其指针为T;
int i=0;
bool flag=1;
int min=max=T.SqBiTNode[0];
bool iftree(SqBitree* T,int i,int min,int max)
{
if(flag=0) return false;//说明此时已经出现了不满足的节点,返回false
if(T.SqBiTNode[i]==-1&&i<T.ElemNum)
{
int weight=T.SqBiTNode[i];
if(weight<max&&weight>T.SqBiTNode[2i+1]) flag=iftree(T,2i+1,min,weight);
else flag=0;
if(weight>min&&weight<T.SqBiTNode[2i+2])flag=(T,2i+2,weight,max);
else flag=0
}
return true;//全部遍历完毕,验证成功
}
}
}
评分及理由
(1)得分及理由(满分4分)
得分:2分
理由:学生基本理解了二叉搜索树的性质(左子树值不大于当前节点,右子树值不小于当前节点),并提出了中序遍历的思想。但是设计思想描述不够清晰准确:
(2)得分及理由(满分9分)
得分:3分
理由:代码实现存在多处严重逻辑错误:
2i+1应写为2*i+1
登录后发布评论
暂无评论,来抢沙发