C++ 2-3树以及如何构建构造函数
我正在尝试为2-3树构建构造函数。但我不知道如何处理这个问题。我们是从一开始就创建一个只有一个值和两个指针(左和中)与该节点关联的节点,还是创建一个有两个值和三个指针(左、中和右)的节点 这是我的2-3节点类。C++ 2-3树以及如何构建构造函数,c++,constructor,C++,Constructor,我正在尝试为2-3树构建构造函数。但我不知道如何处理这个问题。我们是从一开始就创建一个只有一个值和两个指针(左和中)与该节点关联的节点,还是创建一个有两个值和三个指针(左、中和右)的节点 这是我的2-3节点类。 template<class E> class BNode { public: // I'm not sure if this is quite enough for the constructor BNode() {_right == nullptr;};
template<class E>
class BNode
{
public:
// I'm not sure if this is quite enough for the constructor
BNode() {_right == nullptr;};
typedef struct Entry
{
E value;
BNode<E>* _left;
// Constructor for the entry
Entry();
};
E fValue() {return _first.value;}
E sValue() {return _second.value;}
BNode<E>* fLeft() {return _first._left;}
BNode<E>* sLeft() {return _second._left;}
//check if the node is 2 or 3 pointers
bool IsThree()
{
if(_first._left != nullptr && _second._left != nullptr
&& _second._right != nullptr)
_three = true;
else
_three = false;
return _three;
}
Entry fEntry() {return _first;}
Entry sEntry() {return _second;}
BNode<E>* right() {return _right;}
private:
bool _three;
Entry _first, _second;
BNode<E>* _right;
};
template<class E>
BNode<E>::Entry::Entry()
{
_left = nullptr;
}
模板
B类节点
{
公众:
//我不确定这对构造器来说是否足够
BNode(){u right==nullptr;};
typedef结构条目
{
E值;
BNode*_左;
//条目的构造函数
条目();
};
E fValue(){return\u first.value;}
E sValue(){return\u second.value;}
BNode*fLeft(){return\u first.\u left;}
BNode*sLeft(){return\u second.\u left;}
//检查节点是2个指针还是3个指针
布尔伊斯特雷()
{
如果(_first._left!=nullptr&&u second._left!=nullptr
&&_秒。_右!=nullptr)
_三=正确;
其他的
_三=假;
返回三;
}
Entry fEntry(){return\u first;}
Entry sEntry(){return\u second;}
BNode*right(){return\u right;}
私人:
布尔三;
第一个输入,第二个输入;
b节点*(右);
};
模板
BNode::Entry::Entry()
{
_左=空PTR;
}
我认为您首先应该这样声明树:
template<class E>
class BTree
{
public:
BTree();
~BTree();
class BNode
{
public:
// I'm not sure if this is quite enough for the constructor
BNode() {_right == nullptr;};
typedef struct Entry
{
E value;
BNode<E>* _left;
// Constructor for the entry
Entry();
};
E fValue() {return _first.value;}
E sValue() {return _second.value;}
BNode<E>* fLeft() {return _first._left;}
BNode<E>* sLeft() {return _second._left;}
//check if the node is 2 or 3 pointers
bool IsThree()
{
if(_first._left != nullptr && _second._left != nullptr
&& _second._right != nullptr)
_three = true;
else
_three = false;
return _three;
}
Entry fEntry() {return _first;}
Entry sEntry() {return _second;}
BNode<E>* right() {return _right;}
private:
bool _three;
Entry _first, _second;
BNode<E>* _right;
};
private:
BNode* root_;
};
template<class E>
BTree<E>::BNode<E>::Entry::Entry()
{
_left = nullptr;
}
模板
B类树
{
公众:
b树();
~b树();
B类节点
{
公众:
//我不确定这对构造器来说是否足够
BNode(){u right==nullptr;};
typedef结构条目
{
E值;
BNode*_左;
//条目的构造函数
条目();
};
E fValue(){return\u first.value;}
E sValue(){return\u second.value;}
BNode*fLeft(){return\u first.\u left;}
BNode*sLeft(){return\u second.\u left;}
//检查节点是2个指针还是3个指针
布尔伊斯特雷()
{
如果(_first._left!=nullptr&&u second._left!=nullptr
&&_秒。_右!=nullptr)
_三=正确;
其他的
_三=假;
返回三;
}
Entry fEntry(){return\u first;}
Entry sEntry(){return\u second;}
BNode*right(){return\u right;}
私人:
布尔三;
第一个输入,第二个输入;
b节点*(右);
};
私人:
BNode*根;
};
模板
BTree::BNode::Entry::Entry()
{
_左=空PTR;
}
然后,BNode()
应该包含叶上的一个或两个元素,BTree()
应该包含一个列表或/和一个初始值设定项列表,如果使用C++11,则每个叶上都应该包含一个对象列表(2个或3个对象?)。应根据以下图纸,从根开始到最右下叶构建树: