我有一个看起来像这样的数据结构
private String name;
private ArrayList<Node> children;
private String parent="";
public Node(String name) {
setName(name);
children = new ArrayList<Node>();
}
在我的程序的其他地方,我有一个名为“root”的节点,它包含整个树数据结构。
概念上看起来像这样
root
/ \
/ \
node1 node2
/ \
/ \
node2 node3
/
/
node3
如您所见,节点可以具有相同的名称。这是有意的。我想为每个包含自己名称的节点创建一个字符串,加上它的沿袭并将它们存储在Vector中。
因此左侧的节点3将是"root|node1|node2|node3"
rhs上的node3将是"root|node2|node3"
node1将是"root|node1"
等。
我有办法遍历节点结构来打印每个节点,但我发现很难设置每个父节点,因为我无法找到一种方法。任何帮助都会很棒,因为到目前为止我所尝试的一切都失败了。一个重要的注意事项是树可能不一定是二叉树,我只是用它作为一个例子。
这是我用来打印树的每个节点的代码。希望很容易调整。
public void print() {
LinkedList<Node> open = new LinkedList<Node>();
LinkedList<Node> closed = new LinkedList<Node>();
open.add(this);
while(!open.isEmpty()) {
Node currentNode = open.removeFirst();
System.out.println(currentNode.getName());
ArrayList<Node> children = currentNode.getChildren();
closed.add(currentNode);
for(int i = 0; i < children.size(); i++) {
Node current = children.get(i);
open.addLast(current);
}
}
}
谢谢你们。
答案 0 :(得分:0)
在构建树时似乎更容易添加父级,但如果构建了树并希望向每个节点添加父级,则可以使用递归。 我会尝试像
这样的东西addParent(root, "");
public void addParent(Node node, String parent) {
node.setParent(parent);
// if this node has children iterate through them
// and call addParent with current node name.
for(Node childNode : node.getChildren()) {
addParent(childNode, node.getName());
}
}
注意:我在发布之前无法测试此代码。
答案 1 :(得分:0)
我假设您已经创建了这些节点并且它们是使用子节点但没有父节点创建的?似乎有几个选择:
希望这有所帮助,希望我能正确地假设 -Dave