二叉树

本文介绍了二叉树的基本概念,包括二叉树、满二叉树、完全二叉树等分类,详细解析了二叉搜索树及其操作方法,并讨论了平衡二叉搜索树的概念。此外,还介绍了二叉树的遍历方法,以及AVL树和红黑树的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念


分类

  • 二叉树:任何节点最多只有两个子节点
  • 满二叉树:所有能有两个节点的地方都有两个节点
  • 完全二叉树:只有最后一层右边差若干节点
  • 二叉搜索树:左子树中每一个节点的键值<自己<右子树中每个节点的键值,可以提供lg(n)时间复杂度的元素插入与访问。当树退化成链表结构,复杂度就变成了n。插入:从根节点开始,遇大键值则向左,遇小键值则向右,至叶子节点处插入。删除:只有一个子节点,直接将子节点连至父节点;有两个子节点,取右子树中的最小值(一直向左走到底)取而代之。
  • 平衡二叉搜索树:插入删除平均时间长,搜索快,包括AVL-tree、RB-tree、AA-tree。

遍历

  • 先序遍历也叫做先根遍历、前序遍历,可记做根左右(二叉树父结点向下先左后右)。
  • 中序遍历也叫做中根遍历、中序周游。在二叉树中,先左后根再右。巧记:左根右。
  • 后序遍历也叫做后根遍历、后序周游,可记做左右根。后序遍历有递归算法和非递归算法两种。在二叉树中,先左后右再根。巧记:左右根。

术语

  • 节点大小:所有子节点+自己的节点总数
  • 节点高度:到最深子节点的路径长度
  • 节点深度:根节点到自己的路径长度

AVL tree

定义:任何节点左右子树高度相差最多为1
实现:当新插入一个节点,树的平衡被打破,需要重新选择根节点来恢复平衡。设X为平衡被破坏的节点中最深的一个,考虑以X为根的子树。如果插入点在X的左子节点的左子树,选择X左子节点作为根节点进行单旋转;如果插入点在X的右子节点的右子树,选择X右子节点作为根节点进行单旋转。如果插入点在X的左子节点的右子树,选择左子节点的右子树根节点作为根节点,由两次单旋转完成,称双旋转。如果插入点在X右子树的左子树,选择右子树的左子树根节点作为根节点。
问题:如何将保持一颗二叉树的平衡的问题,转化为插入的节点在X的左左、左右、右左、右右四种情况?


RB tree 红黑树

红黑树源于2-3树,用于C++ STL中的set、map,以及Linux虚拟内存的管理。
http://blog.youkuaiyun.com/yang_yulei/article/details/26066409


什么是2-3树


什么是红黑树

定义:

  1. 每个节点不是红色就是黑色
  2. 根节点为黑色
  3. 如果红节点的子节点为黑
  4. 任一节点至子树叶子节点的路径上,所含黑节点数相同。对于左(右)节点为空的情况,添加空节点,认为是黑色的。如果新增节点是黑色的,那么新增节点到父(祖父、祖祖父)节点的路径上黑节点数目就+1了,与其他叶子节点的距离不一致,因此新增节点必为红色。

如何从2-3树到红黑树,相较于2-3树,红黑树的优势

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值