数据结构-20.二叉排序树BST

本文详细介绍了二叉排序树(二叉查找树)的基本概念,包括非递归和递归两种方式实现查找操作。同时,阐述了二叉排序树的插入操作,强调插入节点必须为叶子节点且不允许重复元素。还提供了完整的二叉排序树构造过程,通过插入一系列元素来构建树结构。
摘要由CSDN通过智能技术生成

一.定义和查找指定值:

二叉排序树又称二叉查找树。Binary Search Tree
左子树<根节点<右子树

  1. 非递归算法:
    常数级空间即可O(1)
//定义二叉排序树
typedef struct BSTNode{
	int val;
	struct BSTNode *lChild,*rchild;
}BSTNode,*BSTree;
BSTNode* BST_Search(BSTree T,int key){
	while(T!=NULL&&T->val!=key){
		if(key<T->val)	//若关键值小于当前结点的值
			T=T->lchild;//往左子树走
		else T=T->rchild;//大于当前结点值则往右边走
	}
	return T;
}	
  1. 递归算法:
    最坏空间复杂度O(h)和树的高度有关
//递归实现
BSTNode* BST_Search(BSTree T,int key){
	if(T==NULL||T->val==key)
		return T;			//递归出口
	else if(key<T->val)	//若key值小于当前结点值
		return BST_Search(T->lchild,key);	//递归往左子树走
	else 
		return BST_Search(T->rchild,key);	//递归往右子树走
}

二.二叉排序树的插入:

插入的结点一定是叶子结点。
若二叉排序树为空,则直接插入结点。不允许插入重复结点。

int BST_Insert(BSTree &T,int k){		//注意是引用类型
	if(T==NULL){		//原树为空,新插入结点需要分配空间
		T=(BSTree)malloc(sizeof(BSTNode));
		T->val=k;
		T->lchild=NULL;
		T->rchild=NULL;
		return 1;
	}
	else if(T->val==k)
		return 0;	//插入失败,因为不允许插入重复元素
	else if(k<T->val)
		return BSTree_Insert(T->lchild,k);
	else 
		return BSTree_Insert(T->rchild,k);
}

三.二叉排序树的构造:

void BSTree_Creat(BSTNode &T,int str[],int n){
	T=NULL;	//初始二叉树为空
	int i=0;
	while(i<n){
		BSTree_Insert(T,int str[i]);
		i++;
	}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值