我已经创建了使用堆栈来跟踪一般树中节点的祖先的功能,但它不起作用需要帮助 (John,1925)和(Fred,1900): (Fred,1900) (John,1925)和(Fred,1953)的共同祖先: (John,1925),(Fred,1900)
public void Find_FamilyTree(Node node,Node toFind,Stack<Node> st)
{
st.push(node);
if(node.getData().getName().equals(toFind.getData().getName()))
{
st.pop();
}
如果node是叶节点,则弹出
if(node.getChildrenCount()==0)
{
st.pop();
}
for(Node nodes:node.getChildren())
{
Find_FamilyTree(nodes,toFind,st);
}
}
答案 0 :(得分:1)
这很简单。
只需使用DFS跟踪树并在进入/离开节点时按下/弹出节点。只有在找到节点后立即返回,然后才有一堆祖先。
示例如下:
public boolean Find_FamilyTree(Node node,Node toFind,Stack<Node> st) {
if(node.getData().getName().equals(toFind.getData().getName()))
{
return true;
}
st.push(node);
for(Node nodes:node.getChildren())
{
if(Find_FamilyTree(nodes,toFind,st)){
return true;
}
}
st.pop(node);
return false;
}