如何设计C++树和节点类?

Moe*_*oeb 4 c++ tree data-structures

我所做的是下面的,但这个我有一个很大的问题,同时破坏了树,而要打印的树(基本上,无论我需要使用递归的树).

这是因为在尝试print在右子树的左侧递归调用时,我的方法会中断,因为我的左右子树实际上只是Nodes而不是Trees.因此,我需要将我的节点命名为树或我需要创建新的树,这两个都是丑陋的解决方案.

我认为这里的问题是课堂设计.你能评论一下吗?谢谢!

class Node {
    int _data;
public:
    Node* left;       // left child
    Node* right;      // right child
    Node* p;          // parent
    Node(int data) {
        _data = data;
        left = NULL;
        right = NULL;
        p  = NULL;
    }
    ~Node() {
    }
    int d() {
        return _data;
    }
    void print() {
        std::cout << _data << std::endl;
    }
};

class Tree {
    Node* root;
public:
    Tree() {
        root = NULL;
    }
    Tree(Node* node) {
        root = node;
    }
    ~Tree() {
        delete root->left; // this is NOT RIGHT as
                           // it only deletes the node
                           // and not the whole left subtree
        delete root->right;
        delete root;
    }

    void print(int);
    void add(int);
};
Run Code Online (Sandbox Code Playgroud)

nne*_*neo 8

你为什么不允许Node成为你的树类?根据定义,非空节点是某个树的根.这将大大简化您的代码,因为您不需要为Tree和制作不同的案例Node.