二叉树排序树的通过插入的形式创建,关键在于递归。
#include<stdio.h>
#include<stdlib.h>
typedef struct BSTNode{//到目前为止非常完美
int key;
struct BSTNode *lchild;
struct BSTNode *rchild;
}BSTNode , *BSTree;
int BST_Insert(BSTree &T,int k);
void MidOrder(BSTree T);
BSTNode *BST_Search(BSTree T,int key);//二叉排序树的查找(返回的是一个指针类型结构体 )
BSTNode *BSTSearch(BSTree T,int key);//查找递归形式
void Creat_BST(BSTree &T,int arr[],int len);//数组统一用arr,长度统一用len
int main()
{
int arr[]={50,66,60,26,21,30,70,68};//通过数组构建二叉树
int len=sizeof(arr)/sizeof(arr[0]);//获取长度
BSTree T=NULL;
Creat_BST(T,arr,len);//创造二叉树
MidOrder(T);//中序遍历
return 0;
}
int BST_Insert(BSTree &T,int k){//二叉排序树的插入
if(T==NULL){
T=(BSTree)malloc(sizeof(BSTNode));
T->key=k;
T->lchild=T->rchild=NULL;
return 1;
}
else if(k==T->key)
return 0;
else if(k<T->key) //只看一个
return BST_Insert(T->lchild,k);
else
return BST_Insert(T->rchild,k);
}
void MidOrder(BSTree T)//中序遍历
{
if(T!=NULL){
MidOrder(T->lchild);
printf("%d->",T->key);
MidOrder(T->rchild);
}
}
BSTNode *BST_Search(BSTree T,int key){//非递归查找效率高
while(T!=NULL&&key!=T->key){
if(key<T->key)
T=T->lchild;
else
T=T->rchild;
}
return T;
}
BSTNode *BSTSearch(BSTree T,int key)//查找的递归形式
{
if (T==NULL)
return NULL;//查找失败
if (key==T->key) //空等左
return T;
else if (key <T->key)
return BSTSearch(T->lchild,key);//统一先左有
else
return BSTSearch(T->rchild,key);
}
void Creat_BST(BSTree &T,int arr[],int len){//二叉排序树的构造
T=NULL; //初始时T为空树
int i=0;
while(i<len) {
BST_Insert(T,arr[i]);
i++;
}
}
插入分析
运行结果:
过程清晰,不拖泥带水,如有讨论请关注微信公众号 爱编程的小方。