一、树
1.什么是树
树就是n(n>=0)个节点的有限集,n=0时称为空树。
在任意一棵非空树中:(1)有且仅有一个特定的称为根的节点(2)当n>1时,其余节点可分为m(m>0)个互不相交的有限集合,其中每一个集合本身又是一棵树,并且称为根的子树。
一、遍历二叉树
1.什么是遍历树
遍历树是根据一个特定的顺序访问树的的每一个节点,根据访问根结点顺序的不同分为前序、中序、后序遍历三种。
总结:每一种方式遍历二叉树都用到了递归的思想
2.遍历树的三种形式
- 前序遍历:(1)访问根节点(2)前序遍历左子树(3)前序遍历右子树
- 中序遍历:(1)中序遍历左子树(2)访问根节点(3)中序遍历右子树
- 后序遍历:(1)后序遍历左子树(2)后序遍历右子树(3)访问根节点
总结:中序遍历是最常用的,采用中序遍历出来的树中的所有数据是按照从小到大依次排序的,遍历完之后变成了一个有序数组
二、红黑树
1.红-黑规则
- 每个节点不是红色就是黑色的
- 根节点总是黑色的
- 红色节点的子节点必是黑色的(每条路径上不能有两个连续的红色节点)
- 从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)
2.红黑树的两个特征
- 每个节点都有颜色
- 在插入和删除一个节点时,要遵循保持这些颜色的不同排列规则(上面的红黑规则)
注意:新插入的节点的颜色总是红色的,但这样可能会违背红-黑规则,进而可能会破坏这种平衡性,但是红黑树可以修正
3.红黑树三种修正平衡性的方式
- 改变节点颜色(如果新插入的红色节点违反了规则3,那么我们可以将其父节点改为黑色即可)
- 右旋(右旋的顶端节点必须要有左子节点,右旋完之后左子节点会到顶端节点,而之前的顶端节点会旋转到右下方其右子节点的位置)
- 左旋(左旋的顶端节点必须要有右子节点)