STL之关联式容器(一)

关联式容器
所谓关联式容器,观念上类似关联式数据库(实则更为简单):每笔数据或每个元素都有一个键值(key)和一个实值(value)。当元素被插入到关联式容器中时,容器内部结构(可能RB-tree,也可能是hash-table)便依照其键值大小,某种特定的规则将这个元素放置于适当的位置。关联式容器没有所谓的头尾,只有最大和最小元素,所以不会有所谓push_back()、push_front()、pop_back()、pop_front()、begin()、end()这样的操作行为。
一般而言,关联式容器的内部结构是一个balanced binary tree(平衡二叉树),以便获得良好的搜寻效率。balanced binary tree有许多种类型,包括AVL-tree、RB-tree、AA-tree,其中最被广泛运用于STL的是RB-tree(红黑树)。
树的导览
树,在计算机科学里,是一种十分基础的数据结构。几乎所有的操作系统都将文件存放在树状结构里:几乎所有的编译器都需要实现一个表达式树(expression tree);文件压缩所用的哈夫曼算法需要用到树状结构;数据库所使用的B-tree则是一种相当复杂的树状结构。而RB-tree则是一种被广泛运用、可提供良好搜寻效率的树状结构。
树由节点(nodes)和边(edges)构成。整棵树有一个最上端节点,称为根节点(root)。每个节点可以拥有具方向性的边(directed,edges),用来和其它节点相连。相连节点之中,在上着称为父节点(parent),在下着称为子节点(child)。无
子节点者称为叶节点(leaf)。子节点可以存在多个,如果最多只允许两个子节点,即所谓二叉树(binary tree)。不同的节点如果拥有相同的父节点,则彼此互为兄弟节点(siblings)。根节点至任何节点之间有唯一路径(path)路径所经过的边数,称为路径长度(length)。根节点至任一节点的路径长度,即所谓该节点的深度(depth)。根节点的深度永远是0。某节点至其最深子节点(叶节点)的路径长度,称为该节点的高度。整棵树的高度,便以根节点的高度来代表。节点A->B之间如果存在(唯一)一条路径,那么A称为B的祖代(ancestor),B称为A的子代(descendant)。任何节点的大小(size)是指其所有子代(包括自己)的节点总数。
在这里插入图片描述
二叉搜索树
所谓二叉树搜索树,该树“任何节点最多只允许两个子节点”。
这两个子节点称为称为左子节点和右子节点。如果以递归方式来定义二叉树,我们可以说:“一个二叉树如果不为空,便是由一个根节点和左右两颗子树构成;左右子树都可能为空”。二叉树的运用极广,先前提到的编译器表达树和哈夫曼编码树都是二叉树。
在这里插入图片描述
所谓二叉搜索树(binary search tree),可提供对数时间(logarithmic time)的元素插入和访问。二叉搜索树的节点放置规则是:任何节点的键值一定大于其左子树中的每一个节点的键值,并小于其右子树中的每一个键值。因此,从根节点一直往左走,知道无左路可走,即得最小元素;从跟节点一直往右走,直到无右路可走,即得最大元素。
在这里插入图片描述
二叉搜索树的节点插入操作:
在这里插入图片描述
二叉搜索树的节点删除操作:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值