Back to Posts

数据结构—二叉搜索树

Posted in dataStruct

二叉搜索树又叫BST,这种结构主要是为了与列表搜索和哈希搜索区别开; BST这种结构,不同于列表一味将元素按递增或递减的顺序排列,而是将元素在插入到树中位置时,就先为其找好适当的位置插入,待需要查询的时候,不需要像列表查询那样需要从头找到尾(或者二分法查找);

BST的实现,其实只要知道以下几个条件即可自己实现:

  1. 树中只能有一个根结点
  2. 每个节点最多能有两个子节点
  3. 每个节点的左子节点必须小于自己,右节点必须大于自己

根据以上三个条件,就可以完成BST了,不过实际上流程还是比较复杂,网上给的教程都是噼里啪啦给一堆图;个人感觉用流程图更清晰:

  • put方法:
    image

  • delete方法:
    image

在删除node的方法中,判断node是否为子节点,如果不是叶子节点,那么删除了node时需要考虑它的子节点怎么处理;
处理的方式就是在node子节点中寻找一位继任者来代替node的位置;看似很麻烦,其实由于BST的三个约束,寻找继任者很简单:
删除node,node的继任者必须满足继任者大于原node的左节点,小于等于原node的右节点;

  • 对于寻找继任者,感觉只要看看二叉堆的性质即可,二叉堆的最左边的左节点是最小的(最左边意思就是它已经没有子左节点,不管它有没有子右节点)

实现以上所说的Node结构,以及BST树中核心的put和delete方法,以及一些辅助方法,就能实现一个二叉搜索树了,至于具体实现网上已经很多就不写了。

你看那个人好像一条狗啊

Read Next

设计模式小记&重温数据结构