使用Stack跟踪一般树中节点的所有祖先

时间:2016-10-22 17:48:39

标签: java recursion data-structures tree stack

我已经创建了使用堆栈来跟踪一般树中节点的祖先的功能,但它不起作用需要帮助enter image description here (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);
    }

}

1 个答案:

答案 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;

  }