使用嵌套集,可以在关系数据库中存储树。如何显示树,每个节点的关系是否正确?
例如,每个节点的左右值都存储在db中。如何根据嵌套集数据在java中显示这个树?如何只显示每个节点的正确层次结构和关系与存储在DB中的信息?如何显示从根到没有子节点的路径,例如,A-> B-> D,A-> C,A-> E-> F。
EIDT:
仅基于表格中的信息,是否可以显示树状结构:
A
----乙
-------- d
... C
----ë
--------˚F
感谢。
答案 0 :(得分:0)
假设你有一个课程如下:
class MyNode
{
public int id; // these could (should?) be made private with getter/setter methods
public String value;
public int lft;
public int rgt;
}
使用此功能可以执行以下操作:
ArrayList<MyNode> nodes = new ArrayList<MyNodes>();
// add SQL code to load values from DB
// make sure to load the nodes sorted by their lft values.
for ( int c = 0; c < nodes.size(); c++ )
{
String result = createNodeListFor(nodes.elementAt(c), nodes);
if ( result != null )
{
System.out.println(result);
}
}
遗漏的方法:
public String createNodeListFor( MyNode endNode, ArrayList<MyNodes> nodes )
{
String result = "";
// Again, this assumes the nodes are sorted by 'lft'
for ( int i = 0; i < nodes.size(); i++ )
{
MyNodes current = nodes.elementAt(i);
if ( current.id == endNode.id )
continue; // skip self test
if ( current.lft < endNode.lft && current.rgt > endNode.rgt )
{
if ( result == null )
result = current.value;
else
result += "->" + current.value;
continue;
}
if ( current.lft < endNode.lft && current.rgt < endNode.rgt )
{
return null; // this node is not an end node
}
if ( current.lft > endNode.lft )
{
break; // assuming the list is correctly sorted, we don't need to check any more nodes
}
}
return result;
}
像这样可能工作......祝你好运;)