Graph 用于节点搜索的图遍历
在下图中,子部分以递归方式遍历。每个孩子都必须报告其直系父母。问题是子项[3]必须同时在同一行中报告其直接父项(即子项[2]和子项[4])Graph 用于节点搜索的图遍历,graph,tree,graph-algorithm,tree-traversal,Graph,Tree,Graph Algorithm,Tree Traversal,在下图中,子部分以递归方式遍历。每个孩子都必须报告其直系父母。问题是子项[3]必须同时在同一行中报告其直接父项(即子项[2]和子项[4]) traverse(Node node) { if(node == null) return; for(Node child : node.getChilds()) { traverse(child); } } Parent |---child[1] | child[2] |
traverse(Node node)
{
if(node == null)
return;
for(Node child : node.getChilds()) {
traverse(child);
}
}
Parent
|---child[1]
| child[2]
| child[3]
|---child[4]
child[3]
现在我一次遍历一个节点,生成的输出是-
Node Immediate Parent
--------------------------
child[2] child[1]
child[3] child[2]
child[3] child[4]
预期产量为-
Node Immediate Parent
--------------------------
child[2] child[1]
child[3] child[2], child[4]
搜索节点并生成图形预期输出的最佳方法是什么?任何帮助都将不胜感激。如果您有(或可以添加)一个回到父节点的链接,您可以在第一次遇到节点时列出所有父节点,然后在重复访问时跳过该链接。您可以使用多个选项跟踪节点是否已被访问:
isvisted
成员值添加到节点(默认设置为false
),并在遇到节点时检查该值:如果该值为false
,则处理该节点并将isvisted
设置为true;否则跳过
优点:附加内存少
缺点:具有侵入性、任务特定性,即使不需要,也存在额外的变量,对于需要多个“是否已处理”决策的任务来说,无法很好地扩展注意:如果图中有一个有向(父到子)圆,则通过遍历所有子图来遍历一般图可能导致无限循环。我想您的问题并非如此,只是为了涵盖所有基础:您可以在处理图形时维护一组“已访问”的节点。可用选项的讨论与第一个示例(“链接回父节点”)部分中的讨论相同,在第一个示例中,您给出了一个循环,因此它不是一棵树,而是一个图形。@Betabando实际上我认为他描述的图形是一个什么是节点的实际结构?什么约束将决定哪种搜索方法是最好的?