一、树
1-1、树的基本概念
1、树的节点
2、二叉树
3、树的高度
1-2、二叉查找树
普通二叉树 没有规律,不方便查找,没什么作用。
1、基本概念
2、添加节点
此时,该方式添加形成的二叉查找树,根节点就是第一个节点。
3、查找节点
4、二叉树的遍历
- 前序遍历
- 中序遍历
- 后序遍历
- 层序遍历
①前序遍历
②中序遍历(最常用)
获取到的数据是从小到大的!所以,这种遍历方式是最常见的!
③后序遍历
④层序遍历
5、二叉查找树的弊端
此时,查询效率太低了!
一棵树想要提高查询效率,要树的左、右高度差不多!------平衡二叉树。
1-3、平衡二叉树
1、平衡二叉树的旋转机制
目的:在构建二叉树的时候,保持平衡。
①、左旋
【示例1】:
左旋步骤1:(简单)
【示例2】:
左旋步骤2:(复杂)
②、右旋
【示例1】:
右旋步骤1:(简单)
【示例2】:
右旋步骤2:(复杂)
③、平衡二叉树需要旋转的四种情况
1、左左:一次右旋
2、左右:先局部左旋,再整体右旋
步骤一:局部左旋
步骤二:整体右旋
3、右右:一次左旋
4、右左:先局部右旋,再整体左旋
步骤一:局部右旋
步骤二:整体左旋
小结:
1-4、小结-树的演变
1-5、红黑树
1、红黑规则
2、构建红黑树
添加节点时,默认节点是红色的,因为效率高!(按照红黑规则调整的次数少!)
旋转的时候,先把叶子nil结点去掉,直接转,转完再把nil节点加上即可!
【示例】:
【步骤一】:添加第一个节点
【步骤二】:添加第二个节点
非根,父节点是黑色,不做调整。
【步骤三】:添加第三个节点
【步骤四】:添加第四个节点
非根,父红,叔叔红色:
【步骤五】:添加第五个节点
非根,父节点是黑色,不做调整。
【步骤六】:添加第六个节点
3、红黑树的性能
红黑树的增、删、改、查,性能都比较好!
在构建红黑树的过程中,调整次数多的是改变颜色(只是改变节点里面存储颜色的变量的值),旋转的操作(旋转操作比较耗时!),对比平衡二叉树,少太多了!