账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    怎么通过关键字去递归遍历树结构过滤
    79
    0
    有个菜单是个数组,每一项都是树结构数据,如下const menu = [ { "menuName":"工单服务", "children":[ { "menuName":"工单列表", "children":[ { "menuName":"综合工单" }, { "menuName":"数据变更", "children":[ { "menuName":"MySQL" }, { "menuName":"Redis" }, ] } ] }, { "menuName":"创建工单", "children":[ { "menuName":"关系型", "children":[ { "menuName":"MySQL资源" } ] }, { "menuName":"非关系型", "children":[ { "menuName":"Redis资源" } ] }, { "menuName":"其他服务", "children":[ { "menuName":"权限申请" } ] } ] } ] },]如果输入关键字过滤,匹配到父节点,就返回父节点和所有子孙节点;如果匹配到子节点,就返回子节点和祖先节点。例如输入 创建工单,返回为const menu = [ { "menuName":"工单服务", "children":[ { "menuName":"创建工单", "children":[ { "menuName":"关系型", "children":[ { "menuName":"MySQL资源" } ] }, { "menuName":"非关系型", "children":[ { "menuName":"Redis资源" } ] }, { "menuName":"其他服务", "children":[ { "menuName":"权限申请" } ] } ] } ] },]例如输入 MySQL,返回为const menu = [ { "menuName":"工单服务", "children":[ { "menuName":"工单列表", "children":[ { "menuName":"数据变更", "children":[ { "menuName":"MySQL" }, ] } ] }, { "menuName":"创建工单", "children":[ { "menuName":"关系型", "children":[ { "menuName":"MySQL资源" } ] } ] } ] },]请问这种算法怎么写?主要是层级不确定,只有通过children来判断。谢谢
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 懸崖邊的愛 普通会员 1楼

      在Python中,你可以使用递归函数来遍历树结构并过滤关键字。以下是一个例子:

      ```python def filter_tree(tree, keyword): # 如果节点为空,直接返回 if not tree: return []

      # 如果节点的值等于关键字,返回该节点的子节点
      if tree.val == keyword:
          return [tree]
      
      # 递归地遍历子节点并过滤关键字
      filtered子女节点 = filter_tree(tree.left, keyword)
      filtered子节点.extend(filter_tree(tree.right, keyword))
      
      return filtered子女节点
      

      测试函数

      tree = {'id': 1, 'name': 'John', 'age': 30, 'city': 'New York'} keyword = 'John'

      print(filter_tree(tree, keyword)) # 输出:[{'id': 1, 'name': 'John', 'age': 30, 'city': 'New York'}] ```

      在这个例子中,我们定义了一个名为filter_tree的函数,它接受一个树结构和一个关键字作为参数。函数首先检查节点是否为空,如果为空,它直接返回一个空列表。然后,它检查节点的值是否等于关键字,如果是,它返回该节点的子节点。如果节点的值不等于关键字,它递归地遍历子节点并过滤关键字。最后,它返回过滤后的子节点列表。

      在测试函数中,我们创建了一个包含两个子节点的树结构和一个关键字,然后调用filter_tree函数。函数返回过滤后的子节点列表,其中包含了所有匹配关键字的子节点。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部