【数据结构】-二叉树的应用(二叉排序树)

1.头文件及类型定义

#include<stdio.h>
#include<stdlib.h>
#define ElemType int 

2.二叉排序树结点类型定义

//二叉排序树结点类型定义
typedef struct BSTNode {
   
	ElemType data;		//数据元素		
	struct BSTNode* lchild, * rchild;	//左右指针
}BSTNode, * BSTree;

3.函数声明

/*函数声明*/
BSTNode* BST_Search(BSTree T, ElemType key);			//1-1.查找操作-非递归
BSTNode* BSTSearch(BSTree T, ElemType key);				//1-2.查找操作-递归
bool BST_Insert(BSTree& T, ElemType key);				//2-1.插入操作-非递归
bool BSTInsert(BSTree& T, ElemType key);				//2-2.插入操作-递归
void Create_BST(BSTree& T, ElemType arr[], int n);		//3.构造二叉排序树
BSTNode* FirstNode(BSTNode* p);							//4-1.找到最左下结点
BSTNode* LastNode(BSTNode* p);							//4-2.找到最右下结点
BSTNode* BST_Delete1(BSTree& T, ElemType key);			//4-3.删除操作-用右子树中最左下结点填充
BSTNode* BST_Delete2(BSTree& T, ElemType key);			//4-4.删除操作-用左子树中最右下结点填充
void InOrder(BSTree T);									//5.中序遍历

4.基本操作

4.1 查找操作

4.1.1 非递归查找

//1-1.查找操作-非递归(最坏空间复杂度O(1))
BSTNode* BST_Search(BSTree T, ElemType key) {
   
	while (T != NULL && key != T->data) {
   	//若树空或找到结点,则结束循环
		if (key < T->data)
			T = T->lchild;		//小于,在左子树上查找
		else
			T = T->rchild;		//大于,在右子树上查找
	}
	return T;
}

4.1.2 递归查找

//1-2.查找操作-递归(最坏空间复杂度O(h),h指树的高度)
BSTNode* BSTSearch(BSTree T, ElemType key) {
   
	if (T == NULL)
		return NULL;		//查找失败
	if (key == T->data)
		return T;			//查找成功
	else if (key < T->data)
		return BSTSearch(T->lchild, key);		//小于,在左子树上查找
	else
		return BSTSearch(T->rchild, key)
  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
平衡二叉树二叉排序树和平衡二叉排序树都是数据结构中用于存储有序元素的特殊类型的二叉树,它们在结构和性能上有一些键区别: 1. **二叉排序树(Binary Search Tree, BST)**: - 它是一个二叉树,其中每个节点的左子树包含的值都小于该节点的值,右子树包含的值都大于该节点的值。 - 保证了查找、插入和删除操作的时间复杂度通常为 O(log n)(假设树是完全平衡的),但在最坏情况下(树退化成链表)可能会退化为 O(n)。 - 平衡性不是其固有属性,如果插入或删除操作导致树严重不平衡,性能会下降。 2. **平衡二叉树(Balanced Binary Tree)**: - 这是一个更宽泛的概念,包括但不限于AVL树、红黑树、B树等,这些树的设计目的是在每次插入和删除后自动调整以保持树的高度尽可能均衡。 - 它们都有自我修复的能力,即使在插入或删除操作后也能快速恢复平衡,避免极端情况下的性能退化。 - 不同的平衡二叉树在具体实现上有差异,如AVL树是高度严格平衡的,而红黑树则相对宽松一些,但总体上保证了O(log n)的操作时间。 3. **平衡二叉排序树(Balanced Binary Search Tree, BBST)**: - 这实际上是平衡二叉树二叉排序树的结合,它保持了二叉排序树的排序性,同时具有平衡二叉树的特性。 - 当插入或删除后,BBST会进行适当的旋转操作来维持平衡,确保查找、插入和删除始终能在O(log n)时间内完成。 相问题: 1. 什么是BST的平衡性? 2. AVL树和红黑树是如何保持平衡的? 3. BBST在实际应用中的优缺点是什么?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值