二叉排序树的插入和创建完整代码

2 篇文章 0 订阅
2 篇文章 0 订阅

二叉树排序树的通过插入的形式创建,关键在于递归。


#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++;
	}
}

插入分析
在这里插入图片描述
运行结果:
在这里插入图片描述
过程清晰,不拖泥带水,如有讨论请关注微信公众号 爱编程的小方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的小方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值