c++ - 通过递归查找树中从节点到根的所有父节点

标签 c++ algorithm recursion

我有一个 Graph 类,为树建模。 Graph 包含指向我当前实例(我的当前节点)的父级的指针 Graph*

class Graph
{
private:

    Graph* parent;
public:
    Graph* getparent();
}

Graph* Graph::getparent()
{
    return this->parent;
}

如果是根,则父级位于 nullptr

我正在尝试从节点开始查找从节点到根的距离。

这是我的尝试:

int Graph::howManyParents(Graph* unparent)
{
    int nbParents(0);
    if(unparent != nullptr)
    {
        nbParents++;
        nbParents =+ howManyParents(this->parent);
    }
    return nbParents;
}

它编译但崩溃。调试器向我展示了对该方法的大量调用,但最终出现了 SegFaulting。我的算法有问题吗?

最佳答案

你的递归永远不会停止,除非你将它传递给根,因为你总是调用 this->howManyParents 并因此传递给它相同的父级,它不会变为 null。

不清楚你是想要参数的距离还是this的距离。

查找与给定节点的距离(没有理由认为它是成员):

int howManyParents(Graph* unparent)
{
    int nbParents(0);
    if(unparent != nullptr)
    {
        nbParents = howManyParents(unparent->getparent()) + 1;
    }
    return nbParents;
}

求与 this 的距离:

int Graph::howManyParents()
{
    int nbParents(0);
    if(parent != nullptr)
    {
        nbParents = parent->howManyParents() + 1;
    }
    return nbParents;
}

关于c++ - 通过递归查找树中从节点到根的所有父节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126093/

相关文章:

c++ - 加快大型案例陈述的方法? C++

c++ - unique_ptr 和 shared_ptr 的重载方法与多态性不明确

c++ - 带有 RcppArmadillo 的 R 包中的 ARMA_NO_DEBUG

c++ - OS X 上的链接器 (ld) : How to use -Wl, --start-group(和 --end-group)?

algorithm - 什么算法时间复杂度高,求助 "burn"多CPU周期?

c# - 查找数组中项目的所有组合的最佳方法是什么?

c# - 将递归替换为 TimerCallback 以迭代所有变体

vb.net - 在 VB.NET 中使用 XML 文字进行递归是可能的吗?

java - 使用ArrayList获取二维数组数据

c++ - 递归模板实例化超过最大深度 256