简述
===
- 二分搜索树满足所有二叉树的特征
- 二分搜索树的左子树上的所有子节点都小于当前节点
- 二分搜索树的右子树上的所有子节点都大于当前节点
- 二分搜索树的计算效率
- 插入add 时间效率 O(logn) 级别 因为他的效率之和二叉树的层数有关系
- 搜索 的效率也是O(logn)级别
实现
===
- 节点 Node 来表示每一个节点
- 节点里的值用e 表示 ,左子树和右子树new 自身的类型对象
- 初始化时给当前节点赋值,然后左节点和右节点都为null
- null是用来判断是否为二叉树的末尾
- 主实现方法都在Bst类中
- Bst类中有两个属性
- root 为根节点 size为整个二叉树的节点个数(需要动态维护)
- 如下图
- ![QQ截图20180605125317.png][2]
- 引入node.php
- 初始化根节点 和size大小
- ![QQ截图20181013150142.png][3]
- 获取size大小方法,判断二叉树是否为空
- ![QQ截图20181013150142.png][4]
- 向二分搜索树中添加数据,用到了递归的方法,
- 如果root为空直接挂到root下面,
- 如果root不为空,则进入递归里面进行计算
- 判断当前元素 和递归的当前节点的值大小,小于则进入左子树,大于则进入右子树
- 如果到了节点末尾,则直接连接到末尾节点上
- ![QQ截图20181013150142.png][5]
- 查找方法,通过递归的方法查找元素是否存在,时间复杂度也是O(log(n))
- ![QQ截图20181013151534.png][1]
[1]: http://www.huido.site/usr/uploads/2018/10/1343517845.png
- 前序遍历 中序遍历和后续遍历 都是在递归左右子树的时候打印数据的位置
- 而层序遍历需要借助队列来实现 基于php的数组 array实现的队列 push 和shift方法