[英]Can't get pointer to point to a node
我正在尝试创建自己的二叉树数据结构。
我使用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( );
};
我可以猜测:
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;
}
}
如果您没有其他问题,那应该会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.