【问题标题】:to track all ancestors of a node in general tree using Stack使用堆栈跟踪一般树中节点的所有祖先
【发布时间】:2017-03-04 20:40:25
【问题描述】:

我已经创建了使用堆栈跟踪一般树中节点的祖先的函数,但它不起作用需要帮助 (John, 1925)(弗雷德,1900)(弗雷德,1900 年) (John, 1925)(Fred, 1953) 的共同祖先: (约翰,1925 年),(弗雷德,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();
    }

如果节点是叶节点,则弹出

    if(node.getChildrenCount()==0)
    {
        st.pop();
    }


    for(Node nodes:node.getChildren())
    {
        Find_FamilyTree(nodes,toFind,st);
    }

}

【问题讨论】:

  • 你为什么要从上到下而不是从下往上找呢?
  • 因为我不知道节点的父节点。节点只有它的数据和子列表

标签: java recursion data-structures tree stack


【解决方案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;

  }

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多