• 树结构的模糊查询


    一、核心

            本质上就是对树状结构数据的一个递归遍历+数据比对+数据筛选(保留)

            难点在于非扁平化的树结构在筛选时保留时的取舍,这里的关键是,只要节点存在keyword,那么根节点到当前节点的树结构就必须保留,所以对节点的操作必须放在遍历后

    二、遍历概念

            这里有必要回顾一下数据结构中的二叉树的遍历方式,开发中最常用还是前序遍历(根左右),遍历的目的是访问树结构的每一个节点(且只访问一次),对节点进行一些操作(新增,修改,删除)

            前序遍历可以满足大多数开发场景。但如果涉及到树结构的断层拼接、树结构的模糊查询等等根据条件多层级保留的场景,前序遍历就很无力。因为操作树结构是children渐渐往外发散的,从前往后遍历操作,会丢失掉父层级

    三、实现思路

            后续遍历每个节点,遍历完之后再 左右根 顺序做判断筛选。遍历返回值为临时数组,存放包含keyword的树节点

            叶子节点终止遍历(children.length==0)

            当前节点两种情况:

    • 子节点有返回值,直接纳入临时数组,无需多言,只要包含即这条路径必须保留       
    • 子节点无返回值,判断当前节点是否包含keyword     

    四、实现代码及效果           

            这里用JS实现一下这个过程,其他强类型语言只需要加上变量的类型限制即可,方法思路一致

    1. /**
    2. * 根据关键字检索专题
    3. * @param String searchValue 输入的关键字
    4. * @param treeNode searchTopicCatalogs 待搜索的树结构
    5. * @returns {*}treeNode res
    6. * @private
    7. * 递归查询检索
    8. */
    9. const recursionHandler = (searchValue, searchTopicCatalogs) => {
    10. let tempSearchArr = [];
    11. searchTopicCatalogs.forEach((treeNode) => {
    12. if (treeNode.children && treeNode.children.length > 0) {
    13. // 后序遍历
    14. let tempArr = this.recursionHandler(searchValue, treeNode.children);
    15. // 当前树节点的子节点存在匹配字符,直接纳入数组
    16. if (tempArr.length > 0) {
    17. tempSearchArr.push(treeNode);
    18. }
    19. //当前树节点存在匹配字符
    20. else {
    21. if (treeNode.title.indexOf(searchValue) >= 0) {
    22. tempSearchArr.push(treeNode);
    23. }
    24. }
    25. }
    26. // 叶子节点
    27. else {
    28. // 当前树节点存在匹配字符
    29. if (treeNode.title.indexOf(searchValue) >= 0) {
    30. tempSearchArr.push(treeNode);
    31. }
    32. }
    33. });
    34. return tempSearchArr;
    35. }

  • 相关阅读:
    全球知名Web排名网站Alexe.com将关闭
    CentOS7启动SSH服务报错
    永州动力电池实验室建设合理布局方案
    (附源码)app校园购物网站 毕业设计 041037
    【iptables 实战】06 iptables网络防火墙实验
    狂刷《Java权威面试指南(阿里版)》,冲击“金九银十”有望了
    Educational Codeforces Round 10
    IDM下载器使用教程
    MAC地址修改工具 WiFiSpoof 简体中文
    关于阿里云中RDS数据库的CPU使用率和内存使用率的20道面试题
  • 原文地址:https://blog.csdn.net/qq_46160082/article/details/126932985