二叉搜索树(BST)


性质:

  • 每个结点都有一个作为搜索依据的关键码(key),所有结点的关键码互不相同。
  • 左子树上的所有结点的关键码都小于根结点的关键码。
  • 右子树上的所有结点的关键码都大于根结点的关键码。
  • 左子树和右子树也是二叉搜索树。

二叉搜索树的搜索

从根结点开始,沿着某一个分支逐层向下进行比较判断的过程。可以是一个递归的过程。假设想要在二叉搜索树搜索关键码为x,搜索过程从根结点开始,如果指针为NULL,则搜索失败;否则用给定值x与根结点比较,等于根结点的关键码,搜索成功,返回信息;若小于根结点的关键码,则递归搜索根结点的左子树;否则,递归搜索根结点的右子树。

template<class E, class K>
BSTNode<E,K> *BST<E,K>::Search(const K x, BSTNode<E,K> *ptr){
	if(ptr==NULL) return NULL;
	else if(x<ptr->data) return Search(x,ptr->left);
	else if(x>ptr->data) return Search(x,ptr->right);
	else return ptr;
}

二叉搜索树的插入

指针类型作形参(实际是按值传递,只是指针的地址不变)————该形参变量在函数中改变了对原来的实参变量没有任何影响
引用型指针类型作形参————该形参变量在函数中改变了,原实参变量也会跟着改变

template<class E, class K>
bool BST<E,K>::Insert(const E& el, BSTNode<E,K> *&ptr){//参数表中的引用型指针参数
	if(ptr==NULL){//递归到空树位置,将创建的新结点地址送给ptr,因此用引用
		ptr=new BSTNode<E,K>(el);//新结点作为叶结点插入,因为是递归。
		if(ptr==NULL){cerr<<"Out of space"<<endl; exit(1);}
		return true;
	}
	else if(el<ptr->data) Insert(el,ptr->left);
	else if(el>ptr->data) Insert(el,ptr->right);
	else return false;
}

二叉搜索树的删除

  1. 如果删除叶结点,只需将其父结点指向它的指针清零,再释放它即可。
  2. 如果被删结点右子树为空,可以拿它的左子女结点顶替它的位置,再释放它。如果被删结点左子树为空,可以拿它的右子女结点顶替它的位置,再释放它。
  3. 如果被删结点左右子树都不为空,可以在它的右子树寻找中序下的第一个结点(关键码最小),用它填补到被删结点中,再处理找到的这个结点的删除问题。
template<class E, class K>
bool BST<E,K>::Remove(const K x, BSTNode<E,K> *&ptr){
	BSTNode<E,K> *temp;
	if(ptr!=NULL){
		if(x<ptr->data) Remove(x,ptr->left);
		else if(x>ptr->data) Remove(x,ptr->right);
		else if(ptr->left!=NULL && ptr->right!=NULL){
			temp=ptr->right;
			while(temp->left!=NULL) temp = temp->left;//到右子树寻找中序下第一个结点
			ptr->data=temp->data;//用该结点的数据代替根结点数据
			Remove(ptr->data,ptr->right);//删除根结点的右子树中该点的数据
		}else {//ptr指示关键码为x的结点,只有一个或零个子女
		temp = ptr;
		if(ptr->left==NULL) ptr=ptr->right;
		else ptr = ptr->left;
		delete temp;
		return true;
		}
	}
	return false;
}
			
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值