想想好像是隔了有点久没写了~跑去慕课刷了一下新更新的课程。发现居然有数据结构的!!二话不说就看起来了,这是关于排序二叉树的。
其实二叉树在很久之前我就自学过,但是很快就都忘了,因为老是觉得在工作中实在是用不上这些概念。但是这次着重讲的排序二叉树确实是让我眼前一亮
什么是排序二叉树
讲排序二叉树得先理解什么是二叉树。
- 只有一个根节点
- 节点下只有左右两个子节点,成为左子树和右子树。
- 没有左右子树的节点成为叶子节点
- 二叉树的层级称为二叉树的高
排序二叉树是二叉树的一种特殊形态。特殊在一个地方:
- 左子树的数值必须比节点数值小
- 右字数的数值必须比节点数值大
给个例子,这里不方便画出箭头,所以箭头需要大家自己脑补一下
作用
一开始我也很难理解这玩意能派上什么用场。但是还是半信半疑地学着。(毕竟它不像排序数组那么直观)
中序遍历
排序二叉树能派上什么用场重点在于中序遍历的结合使用。利用中序遍历可以将排序二叉树按照从小到大的顺序进行输出。这里讲一下中序遍历的规则,然后建议是模拟着去读一个排序二叉树,理解它的思想。
- 先遍历节点左子树,并进行输出
- 再遍历节点本身,进行输出
- 最后遍历右子树进行输出
结合这个规则,和上面的子树,这里演示一下代码流程
要对比出这个二叉树到底多优化,其实在编写代码的时候就很明显了。由于有排序的作用在,能够避免很多无用的对比查询。
前序遍历
作用是按照排序二叉树的顺序依次读出,作用一般用于克隆一个二叉树。(克隆带来的效率要比重新构建快得多)
- 先读取节点本身,进行输出
- 节点的左子树,进行输出
- 节点的右子树,进行输出
后续遍历
作用主要运用于文件系统的遍历
- 先读取左子树,进行输出
- 再读取右子树,进行输出
- 最后读取节点本身进行输出
其实在排序上它的作用没有特别明显吧我柑橘。
源码
主要实现的是增删改查,大部分功能都实现了。所以大家直接看源码吧~