数据结构与算法基础

平衡二叉树

  • 平衡二叉树也叫AVL树,AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。
  • 定义:它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。
  • 必要条件:
    1)必须师二叉查找树
    2)每个节点的左子树和右子树之差不超过1

二叉查找树(BST)

二叉查找树又称二叉排序树、二叉搜索树。它要么是一颗空树,要么具有如下的性质:若左子树不为空,则左子树所有结点的值小于它的根节点的值,若右子树不为空,则右子树上所有的结点值均大于它的根结点值。它的左右子树也为二叉查找树。二叉查找树既有链表的快速插入与删除操作的特点,又有数组快速查找的优势,应用什么广泛,文件系统和数据库系统一般会采用这种结构。

AVL树的平衡

AVL树的查找、插入、删除操作在平均和最坏的情况下都是 O(logn),这得益于它时刻维护着二叉树的平衡。如果我们需要查找的集合本身没有顺序,在频繁查找的同时也经常的插入和删除,AVL树是不错的选择。AVL树如何维护二叉树的平衡是学习的重点。

平衡因子

将二叉树上节点的左子树高度减去右子树高度的值称为该节点的平衡因子BF(Balance Factor)。BF的取值范围为[-1, 1],如果发现某个节点的BF值

最小不平衡子树

距离插入节点最近的,且以平衡因子的绝对值大于1的节点为根的子树。

AVL树的平衡调整

  • 在平衡二叉树中插入元素(按二叉排序树的方式)
  • 若出现不平衡,则根据新插入的结点与最低不平衡结点的位置关系进行相应的调整。位置关系分为 LL型、RR型、LR型 和 RL型,各有不同的调整方法。

红黑树(Red Black Tree)

红黑树是一种自平衡(不是绝对平衡)的二叉查找树。红黑树是一种平衡二叉树的变体,它的左右子树的高度差有可能大于1,所以红黑树不是严格意义上的平衡二叉树(AVL),但对之进行平衡的代价比较低,其平均统计性能要强于AVL。
规则:
1)每个节点都是红色或者黑色
2)树的根节点始终是黑色的
3)所有叶子都是黑色的。(叶子是NULL节点)
4)没有两个相邻的红色节点
5)从任一节点到其每个叶子的路劲都包含相同数目的黑色节点
C++ STL库中的 set, multiset, map, multimap 内部采用的就是一种非常高效的平衡检索二叉树:红黑树

深度优先搜索算法和广度优先搜索算法

  • 二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。
  • 深度优先遍历:对每一个可能的分支路径深入到不能深入为止,而且每个节点只访问一次。要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为为先序遍历,中序遍历,后序遍历。
  • 广度优先遍历:又叫层次遍历,从上往下对每一层依次访问,在每一层中,从左往右(也可以从右往左)访问节点,访问完就进入下一层,直到没有节点可以访问为止。
  • 深度优先搜索算法:不保留全部节点,占用空间少;有回溯操作(即入栈、出栈操作),运行速度慢。广度优先搜索算法:保留全部节点,占用空间大;无回溯操作,运行速度快。

常用的排序算法

  • 常用排序算法特点总结
  • 快速排序法为什么不稳定
    排序算法不稳定的含义是指在排序之前,有两个数相等,但在排序结束之后,他们两个有可能改变顺序,这就是说明该排序算法具有不稳定性。原因:在快速排序时,在每一个阶段需要根据中枢将数组分在左右两侧,这样可能改变两个相等元素原来的次序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值