递归二叉树类的斐波那契数列



作为个人项目的一部分,而不是家庭作业-只是出于我自己的兴趣和开始使用c++,我试图创建斐波那契值的二叉树;我知道我在这里犯了一些基本的错误,但如果有人能帮助我,我会很感激,我的代码如下:

#include <iostream>
#include <typeinfo>
using namespace std;
class FibTree {
    class Node {
    public:
        Node const* left;
        Node const* right;
        int value;
        Node (int, Node*, Node*);
    };
    Node const* root;
public:
    FibTree (int);
    int getValue(){
        return this->root->value;
    };
private:
    static Node* buildTree(int n ) {
        if (n < 2) {
            return new Node( n, NULL, NULL );
        } else {
            Node* left = buildTree( n - 1 );
            Node* right = buildTree( n - 2 );
            return new Node( left->value + right->value , left, right );
        }
    }
};
FibTree::FibTree(int n) {
    this->root = buildTree(n);
};
FibTree::Node::Node(int value, Node* left, Node* right){
    this->value = value;
    this->left = left;
    this->right = right;
};
int main () {
    FibTree f(6);
    cout << f.getValue();
    return 0;
}

有没有人能让我知道我在这里做的根本错误,重要的是告诉我为什么我得到错误'不能转换'FibTree'到'FibTree*'在分配;我该如何更好地接近你?

提前感谢亚历克斯

正如错误消息所示,您正在尝试分配一个具体的输入FibTree到指针。在许多情况下,错误是您正在使用指针,但在这种情况下,同一性很重要。对于每个值,您只需要一个FibTree实例。

既然你的目标显然是学习好的实践,我也会首先指出你似乎是抽象的FibTree中实现的不是树的,而是节点的在树上。就我个人而言,我会从一些事情开始如:

class FibTree
{
    class Node
    {
        Node const* left;
        Node const* right;
        int value;
    };
    Node const* root;
public:
    //  ...
};

在那之后,更多的是个人喜好的问题想要筑起大树;重要的一点是,每个节点必须动态分配(new Node(...),而不仅仅是Node(...)),并且leftright指针必须是

除此之外,我不确定你想让我告诉你多少,解决剩下的问题可能是一个有趣的学习过程经验,但如果你想要更多的点击,请随时提问,还有我将编辑这个答案来提供它们。我想说的是:我会添加一个构造函数到Node。类似于Node::Node( int value, Node* left, Node* right )。严格说来说去,你不需要它,它也不会改变算法不管怎样,它会让写算法变得更加简洁。同样,我将使用递归函数来构建结构,从构造函数调用。最后加上a树级的析构函数,它递归遍历树删除所有节点

但是我重复一遍:最重要的一点是要把握节点不是树

        this->left = FibTree(n - 1, this); // This line errors 'Cannot convert 'FibTree' to 'FibTree*' in assignment
        this->right = FibTree(n - 2, this); // This line errors 'Cannot convert 'FibTree' to 'FibTree*' in assignment
应该

        this->left = new FibTree(n - 1, this);
        this->right = new FibTree(n - 2, this);

不知道为什么要把根传递给构造函数,但是你没有对它做任何事情。

最新更新