私がやったことは以下のとおりですが、これにより、ツリーを破壊したり、ツリーを印刷しようとしたりするときに(基本的にはツリーで再帰を使用する必要がある場所で)多くの問題が発生します。
これはprint
、右側のサブツリーの左側で再帰的に呼び出そうとしているときに、左側と右側のサブツリーが実際にはNode
sであり、sではないため、メソッドが機能しなくなるためTree
です。したがって、ノードをツリーにタイプケース化するか、新しいツリーを作成する必要があります。どちらも醜いソリューションです。
ここでの問題はクラスの設計にあると思います。同じことについてコメントしていただけますか?ありがとう!
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);
};