我有一个问题,我有那些类,现在有效,因为我公开了属性,但是如果我把它私有,或保护并继承到第二类,它不起作用,如何我能做到吗?
template <typename T>
class BinaryNode
{
public:
T key;
BinaryNode<T>* left;
BinaryNode<T>* right;
BinaryNode<T>* parent;
BinaryNode(){}
~BinaryNode(){}
};
而且:
template <typename T>
class BinarySearchTree
{
private:
BinaryNode<T>* root;
BinaryNode<T>* newNode(T key);
BinaryNode<T>* minimum(BinaryNode<T>* node);
BinaryNode<T>* maximum(BinaryNode<T>* node);
BinaryNode<T>* successor(BinaryNode<T>* node);
void insert(BinaryNode<T>** node, T key);
BinaryNode<T>* search(BinaryNode<T>* node, T key);
void distance(BinaryNode<T>* node, T key);
void inorderTreeWalk(BinaryNode<T>* node);
public:
BinarySearchTree();
~BinarySearchTree();
void insert(T key);
BinaryNode<T>* search(T key);
void distance(T key);
void inorderTreeWalk();
BinaryNode<T>* remove(BinaryNode<T>* node);
};
答案 0 :(得分:0)
看起来节点与树紧密耦合:
您可以使树成为节点的朋友或使用嵌套类:
class Node {
private:
friend class Tree;
...
};
class Tree {
...
};
或
class Tree {
private: // maybe protected
class Node {
public:
...
};
};
答案 1 :(得分:0)
您可以为节点创建可访问的“getter”函数,以便您可以遍历二叉搜索树中的树。
template <typename T>
class BinaryNode
{
private:
T key;
BinaryNode<T>* left;
BinaryNode<T>* right;
BinaryNode<T>* parent;
public:
BinaryNode(){}
~BinaryNode(){}
T const& getKey() const { return key; }
const BinaryNode<T>* getLeft() const { return left; }
const BinaryNode<T>* getRight() const { return right; }
const BinaryNode<T>* getParent() const { return parent; }
};
现在BinarySearchTree<T>
可以遍历树进行搜索,而无需直接访问成员或能够修改它们。
当然,您可能也想要一些方法来修改值(设置函数)