㈠ 如何判定二叉树是否为二叉排序树
typedef struct bitnode
{
int data; //这里我定义成整型
struct bitnode *lchild,*rchild;
}bitnode,*bitree; //二叉树节点及节点指针类型
void sortbitree(bitree root) //判断是否是二叉排序树
{
bitree s[100];bitree t[100];int top=0;int k=0;
while(root||top)
{
while(root)
{
s[++top]=root;root=root->lchild;
}
if(top)
{
t[k++]=s[top];
root=s[top--]->rchild;
}
}
for(int i=0;i<k-1;i++)
if(t[i]->data>=t[i+1]->data){printf("不是二叉排序树\n");return;}
printf("是二叉排序树\n");
}
㈡ 这是一道数据结构的题:试写一个判别给定二叉树是否为二叉排序树的算法,设此二叉树以二叉链表作存储结构
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);
}
}
已经上机验证成功,楼上的写的太随意了吧,各种情况都需要考虑地。
㈢ 急求:判定一个二叉树是否是排序二叉树的C语言源程序
这个排序只是对换数据.不是改变指针.这样结构体大时就不能用了
#include <stdio.h>//二叉树排序
#include <stdlib.h>
typedef struct btree//结构
{
int a;
struct btree *L;
struct btree *R;
};
btree *create(int n)//建表
{
if(--n){
btree *p;
p=(btree *)malloc(sizeof(btree));
p->a=n;
p->L=create(n);
p->R=create(n);
return p;
}
else return NULL;
}
void commute(btree *p,btree *pre)//交换两个数的值
{
int t;
t=p->a;
p->a=pre->a;
pre->a=t;
}
void endpre(btree *p,btree *pre)//后序遍历 +排序
{
if(p){
endpre(p->L,p);//pre保持指向p的上层...
endpre(p->R,p);
if(pre->a > p->a)commute(pre,p);//孩子父母对换..
}
}
void headpre(btree *p)//前序遍历
{
if(p){
printf("%d ",p->a);
headpre(p->L);
headpre(p->R);
}
}
void depth(btree *p,int lev,int *pe)//求二叉树深度
{
if(p){
if(lev>*pe)*pe=lev;
depth(p->L,lev+1,pe);
depth(p->R,lev+1,pe);
}
}
int main()
{
btree *p;
int n,i=1,j=0;
scanf("%d",&n);
p=create(n);
headpre(p);
printf("\n");
depth(p,i,&j);//求二叉树深度
for(;j>0;j--)endpre(p,p);//这个循环次数为二叉树深度减一
headpre(p);
system("pause");
return 0;
}
㈣ 请编写一个判别给定二叉树是否为二叉排序树的算法
1、首先打开VC++6.0。
7、运行得到结果。
㈤ 这是一道数据结构的题:试写一个判别给定二叉树是否为二叉排序树的算法,设此二叉树以二叉链表作存储结构
用递归:
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。
㈥ 有没有已知二叉树而求判定是否是二叉排序树的算法原代码
typedef struct bitnode
{
int data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
void sortbitree(bitree root)
{
bitree s[100];bitree t[100];int top=0;int k=0;
while(root||top)
{
while(root)
{
s[++top]=root;root=root->lchild;
}
if(top)
{
t[k++]=s[top];
root=s[top--]->rchild;
}
}
for(int i=0;i<k-1;i++)
if(t[i]->data>=t[i+1]->data){printf("不是二叉排序树\n");return;}
printf("是二叉排序树\n");
}
㈦ 试写一个判别给定二叉树是否为二叉排序树的程序!
java">staticbooleanIsSearchTree(Bitree*t){
if(!t)//空二叉树情况
returntrue;
elseif(!(t.lchild)&&!(t.rchild))//左右子树都无情况
returntrue;
elseif((t.lchild)&&!(t.rchild)){//只有左子树情况
if(t.lchild.data>t.data)
returnfalse;
else
returnIsSearchTree(t.lchild);
}
elseif((t.rchild)&&!(t.lchild)){//只有右子树的情况
if(t.rchild.data<t.data)
returnfalse;
else
returnIsSearchTree(t.rchild);
}
else{//左右子树都有的情况
if((t.lchild.data>t.data)||(t.rchild.data<t.data))
returnfalse;
else
return(IsSearchTree(t.lchild)&&IsSearchTree(t.rchild));
}
}
㈧ 急!急!急!如何判断一个二叉树是否是二叉排序树,请写出算法。
#include <STDIO.H>
typedef int DataType;
typedef struct node{
DataType data;
struct node *lchild,*rchild;
}BinTNode;
typedef BinTNode *BinTree;
void CreateBinTree(BinTree *T)
{
int ss;
scanf("%d",&ss);
if(ss==0) *T=NULL;
else{
*T=(BinTNode*)malloc(sizeof(BinTNode));
(*T)->data=ss;
CreateBinTree(&(*T)->lchild);
CreateBinTree(&(*T)->rchild);
}
}
int PXS(BinTree T)
{
int count;
if(T!= NULL)
{
if(T->lchild!=NULL && T->rchild==NULL)
{
if(T->lchild->data>T->data)
count=-1;
放心吧!一定是对的。因为我也要考这门课的。
㈨ (2) 编写一个判断给定二叉树是否为二叉排序树的函数。设此二叉树以二叉链表作为存储结构,且树中节点的
在做课程设计还是毕业设计呀