二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值;
(2)若右子树不空,则右子树上所有节点的值均大于它的根节点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的节点。
以下只创建并先序打印出二叉排序树
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct treenode{
int key;
struct treenode *lchild,*rchild;
}*BTNode,btnode;
btnode *Insert(BTNode &bt,int k){ //插入数据
BTNode f,p=bt;
while(p!=NULL){
f=p;
if(p->key>k){
p = p->lchild;
}else{
p = p->rchild;
}
}
p = (btnode *)malloc(sizeof(btnode));
p->key = k;
p->lchild=p->rchild=NULL;
if(bt==NULL){
bt = p;
}else if(f->key>k){
f->lchild = p;
}else{
f->rchild = p;
}
return bt;
}
//先序遍历
void Preorder(BTNode root){
if(root){
printf("%d ",root->key);
Preorder(root->lchild);
Preorder(root->rchild);
}
}
int main(){
BTNode bt;
int i,n,a;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a);
bt = Insert(bt,a);
}
Preorder(bt);
return 0;
}