以有效的方式实施父子关系的逻辑

时间:2009-12-22 14:24:12

标签: objective-c logic parent-child

我有一个表,其中父子关系船存储为:
ChildID名称ParentID
  1 A1 Null
  2 A2 1
  3 B1 Null
  4 A3 2
  5 A4 1
我正在讨论Objective C,我需要以Manner方式生成文本文件:
 名称= A1>  名称= A2>  名称= A3 />  名称= A2 />
 名称= A4 />
 名称= B1 />

我正在使用approch,首先捕获Last Element(Id = 5),然后检查所有其他节点以获取其父节点。 n复杂性变为n * n-1,还有其他更好的方法,因为当我们在数据库中使用数据时,这种方法并不成功。

数据库结构很灵活,我们可以改变它,如果有更好的东西......

寻求您的帮助和支持。

1 个答案:

答案 0 :(得分:0)

从输出结构中,我假设您的数据代表一棵树。因此,您有一个简单的“获取节点的所有子节点”请求为SELECT childId, name FROM tree WHERE parentId = ?,这使您可以执行标准树遍历。伪代码:

def displayNode(node)  
  children = selectChildren(node.id)
  if (empty(children)) 
    print '<'+node.name+'/>'
  else 
    print '<'+node.name+'>'
    for (child in children) 
      displayNode(child)
    print '</'+node.name+'>'

优化,如果每个节点运行一个查询太多(可能就是这种情况)是运行单个查询来获取所有数据并将其置于优化的数据结构中:

for (node in selectAllNodes())
  nodes[node.parent].append(node);

def selectChildren(id)
  return nodes[id]