我正在尝试创建自己的二叉树数据结构。
我使用BinaryNode<T>
类作为带有BinaryNode<T>*
根的叶子来跟踪根节点。
template<class T>
class PPBinaryTree {
private:
BinaryNode<T>* root;
public:
PPBinaryTree();
bool add(T Data, BinaryNode<T>* Root);
T* search(T Data, BinaryNode<T>* Root);
};
以下是add
函数的实现。无论我尝试什么,我都无法创建任何新的分支。 RootProbe
似乎是分支指针的副本,因此当我为其分配Data
时,分支中没有任何变化。
我能想到的唯一解决方案是改变行
RootProbe = (new BinaryNode<T>(Data));
到
*RootProbe = *(new BinaryNode<T>(Data));
但这只会使我的程序因未处理的异常而崩溃。
template<class T>
bool PPBinaryTree<T>::add(T Data, BinaryNode<T>* Root){
bool isSuccessful = false;
BinaryNode<T>* RootProbe;
if(Root == NULL){
Root = new BinaryNode<T>(Data);
this->setRoot(Root);
isSuccessful = true;
return isSuccessful;
}
else{
while(RootProbe != NULL){
if(Data > Root->getData())
RootProbe = Root->getRightBranch();
else
RootProbe = Root->getRightBranch();
}
RootProbe = (new BinaryNode<T>(Data));
isSuccessful = true;
return isSuccessful;
}
}
以下是BinaryNode
类:
template<class S>
class BinaryNode {
private:
S data;
BinaryNode *leftBranch;
BinaryNode *rightBranch;
public:
BinaryNode(S data);
void setData(S data);
S getData( );
void setLeftBranch(BinaryNode newNode);
BinaryNode* getLeftBranch( );
void setRightBranch(BinaryNode newNode);
BinaryNode* getRightBranch( );
};
答案 0 :(得分:0)
我可以猜到:
while(RootProbe != NULL){
if(Data > Root->getData())
RootProbe = Root->getRightBranch();
else
RootProbe = Root->getRightBranch();
}
RootProbe = (new BinaryNode<T>(Data));
必须更改,从右侧和左侧分支初始化RootProbe。 您也忘了在树中的某处设置RootProbe。
BinaryNode<T>* LastLiveProbe;
while(RootProbe != NULL){
if(Data > Root->getData())
{
RootProbe = Root->getLeftBranch();
if (RootProbe == NULL)
LastLiveProbe->setLeftBranch(new BinaryNode<T>(Data));
else
LastLiveProbe = RootProbe;
}
else
{
RootProbe = Root->getRightBranch();
if (RootProbe == NULL)
LastLiveProbe->setRightBranch(new BinaryNode<T>(Data));
else
LastLiveProbe = RootProbe;
}
}
如果您没有其他问题,那应该会有所帮助。