导航:首页 > 源码编译 > 判别给定二叉树是否为二叉排序树的算法

判别给定二叉树是否为二叉排序树的算法

发布时间:2022-09-11 04:46:19

㈠ 如何判定二叉树是否为二叉排序树

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;

}

(5)判别给定二叉树是否为二叉排序树的算法扩展阅读:

构成递归需具备的条件:

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

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

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

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

某人的双亲是他的祖先(基本情况)。某人祖先的双亲同样是某人的祖先(递归步骤)。斐波纳契数列(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) 编写一个判断给定二叉树是否为二叉排序树的函数。设此二叉树以二叉链表作为存储结构,且树中节点的

在做课程设计还是毕业设计呀

阅读全文

与判别给定二叉树是否为二叉排序树的算法相关的资料

热点内容
采购岗位须要程序员吗 浏览:637
线性判别分析算法 浏览:425
解压折纸教程书 浏览:488
应广单片机代理 浏览:510
女白领吃甜食解压视频 浏览:818
md5加密系统中的应用 浏览:904
空调压缩机线路原理图 浏览:416
双钥加密技术有哪些 浏览:268
免费的pdf虚拟打印机 浏览:797
weblogic命令发布 浏览:911
编程入门基本功训练视频 浏览:987
单片机北邮 浏览:212
安卓平板如何用蓝牙传照片 浏览:426
ios8pdf下载 浏览:414
怀旧服大脚冷却计时命令 浏览:23
java求数组的最大值 浏览:840
出风口加密有什么弊端 浏览:803
横盘震荡趋势选股公式源码 浏览:474
程序员出差穿什么鞋 浏览:192
注册登陆验证源码 浏览:397