对于一个学校项目,我需要为索引和T类型的值的元组构建BinarySearchTree,我决定使用左右两个子指针(指向其他实例,但请耐心等待)。
为了使该类更具现实性和可读性,我构建了3个不同的类:具有继承的Tree,BinaryTree和BinarySearchTree。
我在BinaryTree类中声明了左侧和右侧子级的getter和setter,该类如下所示:
template <typename T>
class ArbreBinaire : public Arbre<T>
{
private:
ArbreBinaire<T>* _leftChild;
ArbreBinaire<T>* _rightChild;
public:
ArbreBinaire(lu index = 0, T element = T(0), ArbreBinaire<T>* lchild = nullptr, ArbreBinaire<T>* rchild = nullptr) :
Arbre<T>(index, element), _leftChild(lchild), _rightChild(rchild) {};
virtual ArbreBinaire<T>* getLC() const { return _leftChild; }
virtual ArbreBinaire<T>* getRC() const { return _rightChild;}
void setLC(ArbreBinaire<T>* lc) { _leftChild = lc; lc->setParent(this); }
void setRC(ArbreBinaire<T>* rc) { _rightChild = rc; rc->setParent(this); }
virtual ~ArbreBinaire() = default;
};
在BinarySearchTree中的某些地方,我需要遍历我的树(以插入或搜索示例)。 因此,我的问题终于来了:获取对象左孩子的最佳方法是BinarySearchTree类型并保持连续性(具有BST左孩子和BST右孩子的BST)的最佳方法是什么?
我想到了多种选择:
我的BST中是否应该有2个其他成员,这些成员的类型为BST *,并且基本上指向与BinaryTree中的对象相同的对象?
我应该重新定义我的吸气剂以返回诸如以下的dynamic_cast版本:BST<T>* getLC() { return dynamic_cast<BST<T>*> (this->BinaryTree::getLC()) }
吗?
将我的所有成员,getter和setter放入我的BST类中(但这与BinaryTree的定义相反:基类:没有子项的BinaryTree不是BinaryTree)
3。每次我需要生左或右孩子时,都要抛石膏
4.每次我需要在BST(派生类)中使用方法时进行铸造吗?
5.还有其他建议吗?