golang路由前缀树实现

#前缀树

一个简单路由前缀树的实现,前缀树如图,是一个方便进行字符串查找的数据结构,同样适用于路由查找,其原理是树的遍历,远离比kmp更简单,性能更高效,其功能包括一下几点:

  • 插入
  1. 当新路由(字符串)进树的过程中,将路由(字符串)分割为最小单元,路由的最小单元是以“/”分割,每一段都是树中的part。
  2. 遍历or递归检测当前节点的子节点是否包含最小单元信息,如图,比如路由/a/b的寻找路径是,先判断root下是否有a,没有创建节点,指针指向a节点,开始找/b,步骤同上,当走完全部最小单元完成插入,最后在最后一个节点上设置标志位,目的是代表路径走到这里可以代表一个完成的路由。
  • 删除
  1. 当新路由(字符串)进树的过程中,将路由(字符串)分割为最小单元。
  2. 遍历or递归检测当前节点的子节点是否包含最小单元信息,如图,比如路由/a/b的寻找路径是,先判断root下是否有a,没有则返回删除失败,指针指向a节点,开始找/b,步骤同上,当走完全部最小单元,清除完整标志位并判断是否删除节点,如果还有子节点,那么肯定是不能删除的。
  • 查找
  1. 当新路由(字符串)进树的过程中,将路由(字符串)分割为最小单元。
  2. 遍历or递归检测当前节点的子节点是否包含最小单元信息,如图,比如路由/a/b的寻找路径是,先判断root下是否有a,没有则返回查找不存在,指针指向a节点,开始找/b,步骤同上,当走完全部最小单元,判断完整标志位是否存在,如果存在则返回存在,如果不存在则不存在

代码实现: