关于#数据结构#的问题,如何解决?

树状表格数据查询问题

有一个表格,其中的数据是树状的,包含多个字段
uid
name
p_uid
other
现在要对这个表格进行 name 的查询,返回树状的结果。其中 name 可以重复,包括父子重复,兄弟重复等。
现在能想到的解决方法,就是全查出来,然后建树,最后递归每一次层,符合要求的存入结果 list 中,但这样耗时也太高了,想问问有没有其他的好的解决方法?

对 uid name建立索引
首先按照name把相关记录查询出来,再依次重建出树状关系

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    对于树状表格数据查询问题,可以考虑使用递归和迭代来实现。

    1. 递归实现

    递归实现要先定义节点类,包含 uid、name、p_uid 和 other 四个字段,以及一个子节点列表 children。然后以根节点作为起点,从上往下找到名字匹配的节点并加入结果列表中,并对其子节点递归。

    代码如下:

    class Node:
        def __init__(self, uid, name, p_uid, other):
            self.uid = uid
            self.name = name
            self.p_uid = p_uid
            self.other = other
            self.children = []
    
    def query_tree(root, name, result):
        if root is None:
            return
        if root.name == name:
            result.append(root)
        for child in root.children:
            query_tree(child, name, result)
    
    1. 迭代实现

    迭代实现需要借助辅助数据结构,如队列。首先将根节点加入队列,然后对队列元素逐个弹出,如果名字匹配则加入结果列表中,否则将其子节点加入队列。

    代码如下:

    def query_tree(root, name, result):
        if root is None:
            return
        queue = [root]
        while queue:
            node = queue.pop(0)
            if node.name == name:
                result.append(node)
            for child in node.children:
                queue.append(child)
    

    需要注意的是,由于名字可能重复,所以在向队列中加入子节点时要进行判断,避免重复添加。

    以上是两种可行解决方案,可以根据具体情况选择使用哪种方式。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^