#include <iostream>
#include <stack>
#include <queue>
#include<limits.h>
using namespace std;
#define MINKEY INT_MIN //关键字的下限
class Treenode{
public:
int data;
Treenode * lchild;
Treenode * rchild;
};
typedef struct Treenode* Bitree;
void CreatBitree(Bitree &T,int a[],int &i){
i++;
if(a[i]==0) {T=NULL;return;}
T=new Treenode;
T->data=a[i];
CreatBitree(T->lchild,a,i);
CreatBitree(T->rchild,a,i);
}
void CreatBitree(Bitree &T,int a[]){
int i=-1;
CreatBitree(T,a,i);
}
void IsBstree(Treenode *T,int &pre,bool &flag){
if(flag==true){
if(T->lchild){
IsBstree(T->lchild,pre,flag);
}
if(T->data>=pre){
pre=T->data;
}
else flag=false;
if(T->rchild){
IsBstree(T->rchild,pre,flag);
}
}
}
bool IsBstree(Treenode *T){
int pre=MINKEY;
bool flag=true;
IsBstree(T,pre,flag);
return flag;
}
/*bool IsBstree( Treenode *T){
if(T==NULL) return true; //树为空
else if(!T->lchild&&!T->rchild) return true; //左右子树为空
else if(T->lchild&&!T->rchild){ //左不空右空
if(T->lchild->data>T->data){
return false;
}
else return IsBstree(T->lchild);
}
else if(!T->lchild&&T->rchild){ //右空左不空
if(T->rchild->data<T->data){
return false;
}
else return IsBstree(T->rchild);
}
else { //左右都不空
if((T->lchild->data>T->data)||(T->rchild->data<T->data)){
return false;
}
else return (IsBstree(T->lchild)&&IsBstree(T->rchild));
}
}*/
int main (){
Bitree A;
int a[20]={10,7,3,0,0,8,0,0,12,11,0,0,15,0,0,0};
CreatBitree(A,a);
if(IsBstree(A)) cout<<"二叉树A是二叉排序树"<<endl;
else cout<<"二叉树A不是二叉排序树"<<endl;
Bitree B;
int b[20]= {7,4,5,0,0,0,8,0,0,0};
CreatBitree(B,b);
if(IsBstree(B)) cout<<"二叉树B是二叉排序树"<<endl;
else cout<<"二叉树B不是二叉排序树"<<endl;
}
判断二叉树是否为二叉排序树
最新推荐文章于 2026-04-19 17:35:48 发布
该博客主要展示了一段C++代码,用于创建二叉树并判断其是否为二叉排序树。代码中定义了树节点类,实现了创建二叉树和判断二叉排序树的函数,最后在主函数中对两个二叉树进行判断并输出结果。
1万+

被折叠的 条评论
为什么被折叠?



