1.二叉树的分类
- 满二叉树:从高到低,除了叶节点外,所以节点左右节点都存在。
- 完全二叉树:比满二叉树少几个叶节点,从左向右放子节点。
- 平衡二叉树:空树或者它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树也都是平衡树。
- 二叉搜索树:空树或者二叉树的所有节点比他的左子节点大,比他的右子节点小。
- 红黑树:不仅是具有二叉搜索树的属性,还具有平衡树的属性,有序且子树差不超过1
红黑树的颜色规则:根节点和特殊节点(即叶节点下面两个虚无的节点和未填写的节点)是黑的,红节点
的左右子节点是黑的,最重要的是对于每个节点,从该节点到子孙叶节点的所有路径包含相同数目的黑节点。
2. 二叉树在搜索上的优势
数组利用下标,搜索方便,删除或者插入麻烦
链表与之相反,查找很慢,删除和插入简单
原因在于这两种数据结构的存储方式,数组是取一段相连的空间,而链表是每创建一个节点便取一个节点所
需的空间,只是使用指针进行连接,空间上并不是连续的。而二叉树就既有链表的好处,又有数组的优点。
3. 二叉树的遍历
先序遍历(pre order): 根 左 右
中序遍历(in order): 左 根 右
后序遍历(post order):左 右 根
4. 二叉树的序列化和反序列化(serialize and deserialize)
序列化:结构化数据---->顺序数据流
反序列化:顺序数据流---->结构化数据
二叉树的遍历可以实现二叉树的序列化,但是单独的一个遍历序列无法完成二叉树的还原,即反序列化,先
序+中序或者后序+中序可以还原二叉树。
5.1. 二叉搜索树(BST:binary search tree)
1.定义:对于任意一个节点,其值大于左子树的任何节点,且小于右子树的任何节点,则为二叉搜索树。(空树也是BST)
2.性质:中序遍历BST,其遍历结果是一个有序序列。因此,二叉搜索树又称为二叉排序树。
优:查找的最大次数为树的高度
缺:因其序列性,有可能会退化成单链表
3.区分:二叉搜索树要求当前节点与其左右子树都需满足定义中的关系;最大堆(或最小堆),只要求当前节点与当前节点的左右子节点满足一定关系。
BST是为了查找,堆是为了排序 .
(堆是完全二叉树,插入到二叉树的最底层的最右边,逐步调整;删除只能删除堆顶节点)
4.插入和删除:
插入:找到对应的空位置,直接插入;否则,不做操作</