基于php的二分搜索树

简述
===
- 二分搜索树满足所有二叉树的特征
- 二分搜索树的左子树上的所有子节点都小于当前节点
- 二分搜索树的右子树上的所有子节点都大于当前节点
- 二分搜索树的计算效率
    - 插入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方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值