㈠ 如何判定二叉樹是否為二叉排序樹
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) 編寫一個判斷給定二叉樹是否為二叉排序樹的函數。設此二叉樹以二叉鏈表作為存儲結構,且樹中節點的
在做課程設計還是畢業設計呀