#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; }
判断二叉树是否为二叉排序树
最新推荐文章于 2024-07-09 12:05:51 发布