二叉查找树(BinarySearch Tree,也叫二叉搜索树,或称二叉排序树Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树:
(1)、若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值;
(2)、若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值;
(3)、它的左、右子树也分别为二叉查找树。
二叉搜索树的基本操作:
插入结点、构造二叉树、删除结点、查找、 查找最大值、查找最小值、查找指定结点的前驱和后继。
/*二叉搜索树的简单创建*/
#include <stdio.h>
#include <malloc.h>
struct BT{
int data;
BT *lchild,*rchild;
BT(BT *root){
root=NULL;
}
};
void insert(BT * &root,int data)
{
BT *q=(BT*)malloc(sizeof(BT));
q->data=data;
q->lchild=NULL;
q->rchild=NULL;
if(root==NULL)
{
root=q;
}
else if(data>root->data)
{
insert(root->rchild,data);
}
else
{
insert(root->lchild,data);
}
}
void search(BT *root)
{
if(root)
{
if(root->lchild)
search(root->lchild);
printf("%d->",root->data);
if(root->rchild)
search(root->rchild);
}
}
int main()
{
BT *p=NULL;
int n;
int a[100];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
{
insert(p,a[i]);
}
search(p);
}
//看两棵树的序列是否相同:
bool comp(BT *win,BT *hex)
{
if(win==NULL&&hex==NULL)
return true;
else if(win==NULL||hex==NULL)
return false;
else
return (win->lchild,hex->lchild)&&(win->rchild,hex->rchild);
}