#include<bits/stdc++.h>
using namespace std;
typedef struct BiNode
{
int data;
BiNode *lchild,*rchild;
}BiNode,*BiTree;
//插入
void Insert(BiTree &bt,int k)
{
if(bt==NULL)
{
bt=(BiTree)malloc(sizeof(BiNode));
bt->data=k;
bt->lchild=NULL;
bt->rchild=NULL;
}
else if(bt->data==k)
{
cout<<"插入失败"<<endl;
}
else if(k<bt->data)
{
Insert(bt->lchild,k);
}
else
{
Insert(bt->rchild,k);
}
}
void PreOrder(BiTree bt)
{
if(bt!=NULL)
{
cout<<bt->data<<" ";
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
//查找
BiNode *Find(BiTree bt,int x)
{
while(bt!=NULL&&x!=bt->data)
{
if(x<bt->data)
{
bt=bt->lchild;
}
else
{
bt=bt->rchild;
}
}
return bt;
}
//判断是否为二叉排序树
int pre=-1;
int JudgeBST(BiTree bt)
{
int b1,b2;
if(bt==NULL)
{
return 1;
}
else
{
b1=JudgeBST(bt->lchild);
if(b1==0||pre>=bt->data)
return 0;
pre=bt->data;
b2=JudgeBST(bt->rchild);
return b2;
}
}
//输出二叉排序树最小最大关键字
void MinKey(BiTree bt)
{
while(bt->lchild!=NULL)
bt=bt->lchild;
cout<<bt->data<<endl;
}
void MaxKey(BiTree bt)
{
while(bt->rchild!=NULL)
bt=bt->rchild;
cout<<bt->data<<endl;
}
//从大到小输出大于k的节点
void OutPut(BiTree bt,int k)
{
if(bt==NULL)
return;
if(bt->rchild!=NULL)
OutPut(bt->rchild,k);
if(bt->data>=k)
cout<<bt->data<<" ";
if(bt->lchild!=NULL)
OutPut(bt->lchild,k);
}
//判断是否为平衡二叉树
void JadgeAVL(BiTree bt,int &balance,int &h)//平衡标记和高度
{
int bl=0,br=0,hl=0,hr=0;
if(bt==NULL)
{
h=0;
balance=1;
}
else if(bt->lchild==NULL&&bt->rchild==NULL)
{
h=1;
balance=1;
}
else
{
JadgeAVL(bt->lchild,bl,hl);
JadgeAVL(bt->rchild,br,hr);
h=(hl>hr?hl:hr)+1;
if(abs(hl-hr)<2)
balance=bl&&br;
else
balance=0;
}
}
int main()
{
int x,n;
cin>>n;
BiTree bt=NULL;
for(int i=0;i<n;i++)
{
cin>>x;
Insert(bt,x);
}
PreOrder(bt);
cout<<endl;
OutPut(bt,35);
}
二叉排序树基础
最新推荐文章于 2024-08-12 16:55:46 发布