这是一道数据结构的题:试写一个判别给定二叉树是否为二叉排序树的算法,设此二叉树以二叉链表作存储结构

树中结点的关键字均不同。... 树中结点的关键字均不同。 展开
 我来答
水果山猕猴桃
高能答主

2019-06-11 · 经不住似水流年,逃不过此间年少
水果山猕猴桃
采纳数:519 获赞数:110489

向TA提问 私信TA
展开全部

用递归:

a=当前节点是否为排序树,是为1,不是为0

f(x)=1 当x为叶节点 

f(x)= a&&f(x->lchid)&&f(x-rchild)  当x非叶节点

----------------------------------------------------------------------

int IsAVTree(BiTree t)

{

int a=1;

if(t->Child==NULL&&t->Rchild==NULL)  return 1;  //叶子节点判断

if((t->Lchild->data>t->data)||(t->Rchild->datadata)) 

{

a=0;

a=a&&(isAVTree(t->Lchild))&&(IsAVTree(t->Rchild));

}

return a;

}

扩展资料:

构成递归需具备的条件:

一、子问题须与原始问题为同样的事,且更为简单;

二、不能无限制地调用本身,须有个出口,化简为非递归状况处理。

在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。

例如,下列为某人祖先的递归定义:

某人的双亲是他的祖先(基本情况)。某人祖先的双亲同样是某人的祖先(递归步骤)。斐波纳契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8。

参考资料来源:百度百科-递归

匿名用户
推荐于2018-02-27
展开全部
int IsSearchTree(const BTNode *t){
if(!t) //空二叉树情况
return 1;
else if(!(t->lchild) && !(t->rchild))//左右子树都无情况
return 1;
else if((t->lchild) && !(t->rchild)){//只有左子树情况
if(t->lchild->data>t->data)
return 0;
else
return IsSearchTree(t->lchild);
}
else if((t->rchild) && !(t->lchild)){//只有右子树情况
if(t->rchild->data<t->data)
return 0;
else
return IsSearchTree(t->rchild);
}
else{ //左右子树全有情况
if((t->lchild->data>t->data) ||(t->rchild->data<t->data))
return 0;
else
return IsSearchTree(t->lchild) && IsSearchTree(t->rchild);
}
}

已经上机验证成功,楼上的写的太随意了吧,各种情况都需要考虑地。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
桂纶美
推荐于2017-12-16 · TA获得超过1973个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:276万
展开全部
小哥哥,用递归:
a=当前节点是否为排序树,是为1,不是为0
f(x)=1 当x为叶节点
f(x)= a&&f(x->lchid)&&f(x-rchild) 当x非叶节点
----------------------------------------------------------------------
int IsAVTree(BiTree t)
{
int a=1;
if(t->Child==NULL&&t->Rchild==NULL) return 1; //叶子节点判断
if((t->Lchild->data>t->data)||(t->Rchild->data<t->data))
{
a=0;
a=a&&(isAVTree(t->Lchild))&&(IsAVTree(t->Rchild));
}
return a;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
whuibz
2012-12-31
知道答主
回答量:19
采纳率:0%
帮助的人:12.5万
展开全部
递归方法
void alvtree(bittree *t)
{
int if(!t) return 1;
else if(t->lchild!=null&&t->rchild!=null)
{ if(t->lchild->data<=t->data&&t->rchild->data>=t->data)

{ alvtree(t->lchild);
alvtree(t->rchild);

}

else return 0;

}

else if (t->lchild!=null&&t->rchild==null)
{ if(t->lchild->data<=t->data)

alvtree(t->lchild);

else return 0;

}
else if (t->rchild!=null&&t->lchild==null)
{
if (t->rchild->data>=t->data)

alvtree(t->rchild);

else return 0;

}

}

自己写的情况应该都考虑到了,采用的是递归算法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式