n叉树结构的检索算法实现

使用python实现n叉树检索算法。
n叉树结构基于现实业务,基本数据结构如下:

[
  {
    "id": "",
    "name": "公司1",
    "children": [
      {
        "id": "",
        "name": "公司2",
        "children": []
      }
    ]
  }
]

实现代码如下,使用了两个函数进行递归调用

import json


def find_text(obj, text):
    """
    检索该对象及子对象的名称中是否含有指定关键字
    父节点有关键字,返回True
    如没有,检索子节点,一旦发现匹配则返回True
    如果父子节点都检索不到,返回False
    :param obj: dict, 节点对象
    :param text: str, 关键字
    :return:boolean
    """
    if text in obj["name"]:
        return True
    else:
        for z_obj in obj["children"]:
            if find_text(z_obj, text):
                return True
    return False


def push_obj(obj_list, text):
    """
    将符合条件的节点对象存入新的列表中
    遍历所有对象,并判断对象及其子对象名称中是否匹配关键字
    如匹配,则存入新的列表,否则不做任何动作
    与此同时判断子节点是否匹配,如果匹配一并放入新列表
    :param obj_list: list, 节点对象列表
    :param text: str, 关键字
    :return: list, 节点对象列表
    """
    new_list = []

    for obj in obj_list:
        if find_text(obj, text):
            s_list = push_obj(obj["children"], text)
            obj["children"] = s_list
            new_list.append(obj)

    return new_list


def main():
    # 如果需要文件可以发邮件联系
    with open("tree.json", "r", encoding="utf-8") as f:
        obj_list = json.load(f)
    text = "5"
    result = push_obj(obj_list, text)
    
    for r in result:
        print(r)


if __name__ == '__main__':
    main()

你可能感兴趣的:(python,后端)